2

我正在编写一个带有小部件的 Wordpress 插件。在我的 jQuery 代码中,我想指向那个小部件,所以我虽然给它一个HTML ID会很好。(已编辑,谢谢指出。)

在互联网(和 Codex)上进行一些搜索后,我知道我可以为主题中的小部件提供 ID,但这不是我想要的。这种方法有缺陷。更改主题可能会导致错误(当然,知道必须在functions.php中更改它,但这只是 meh)。另一件事是我的小部件有一个数字,可能会在我不知道的情况下发生变化。

所以为了 100% 确定它可以工作并且将来会工作,我可以给我的小部件我自己的 ID吗?

4

1 回答 1

3

我可能不完全理解您的问题以及"ID"您的意思(小部件 ID 或实际 HTML div ID - 实际上是一个并且相同..)但如果您已阅读 codex,则给出了如何提供 ID 的示例那里 ..

function __construct() {
        parent::__construct(
            'foo_widget', // Base ID
            __('Widget Title', 'text_domain'), // Name
            array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // Args
        );
    }

另一种做同样事情的方法(如果你在谈论HTML像这样的元素很有帮助divs- 你可以分配 a class

function My_Widget() {  
    function My_Widget() {  
        $widget_ops = array( 'classname' => 'example', 'description' => __('A widget that displays nothing ', 'example') );  
        $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'example-widget' );  
        $this->WP_Widget( 'example-widget', __('Example Widget', 'example'), $widget_ops, $control_ops );  
    }  

请注意,分子将根据启动的实例数自动添加到您的小部件的 ID,例如:

foo_widget
foo_widget-2
foo_widget-3

ETC ...

编辑我- 评论后

无论如何,恕我直言,ID在小部件中硬编码一个固定是一个坏主意,原因很简单,从开发人员的角度来看,对小部件的偏好是始终允许支持多个实例。给HTML ID小部件上的任何地方都将导致验证错误,并且在jQuery- 的情况下也会导致错误,JS原因很简单,如果用户将有 2 个小部件,它也会有一个重复的 ID。

换句话说-这与您在原始问题中的陈述完全相反。

所以为了 100% 确定它可以工作并且将来可以工作,我可以给我的小部件我自己的 ID

为您的小部件提供固定的硬编码 ID 实际上将确保它不会100% 工作。

偏好总是使用 a class(或类似的东西div[id^="my_widget_id"])来解决此类问题,并让 wordpress “做它的事情”(通过自动递增 ID)。

出于完全相同的原因 - 主题在register sidebar()函数中应该始终具有相同的结构,如下所示:

<?php $args = array(
    'name'          => __( 'Sidebar name', 'theme_text_domain' ),
    'id'            => 'unique-sidebar-id',
    'description'   => '',
        'class'         => '',
    'before_widget' => '<li id="%1$s" class="widget %2$s">', // LOOK AT THIS LINE 
    'after_widget'  => '</li>',
    'before_title'  => '<h2 class="widgettitle">',
    'after_title'   => '</h2>' ); ?>

这将允许将特定的侧边栏添加到auto increment小部件的 ID 以避免上述问题。

来自法典:

before_widget - HTML 放置在每个小部件之前(默认值:'')注意:使用 sprintf 进行变量替换

说了这么多,如果你坚持在某个地方提供一个硬编码的固定 ID(而不是上面描述的方法),你总是可以把它放在嵌套的div或在span你的小部件的 HTML 输出中,但我会认为如果你仔细阅读了这个答案 - 你现在会避免它。

现在,-由于您没有在问题中包含任何代码(这在 SE 上始终是一种不好的做法),因此我无能为力。如果您遇到任何针对没有 ID 的小部件的问题 - 我建议您打开一个新问题,并可能在此处的评论中指向一个链接,以便我自己(和其他人)可以帮助您。

于 2013-11-07T00:49:14.633 回答