在Wordpress中为小部件提供我自己的id或类

时间:2013-11-07 00:33:11

标签: wordpress widget

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

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

因此,为了100%确定它是否有效并且将来有效,我可以将我的小部件我自己的ID

1 个答案:

答案 0 :(得分:2)

我可能不完全理解你的问题,你的意思是什么“ID”(小部件ID,或者实际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
        );
    }

另一种做同样的方法(如果你在谈论divs,也可以帮助你 - 你可以指定一个班级)

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
等等......

编辑我 - 评论后

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

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

  

因此,为了100%确定它的工作原理并将来会有效,我可以给我的   小部件我自己的ID

为您的小部件提供固定的硬编码ID实际上会确保 NOT 在100%的时间内都能正常工作。

首选项始终是使用class(或类似div[id^="my_widget_id"])来解决此类问题,并让wordpress“做到这一点”(通过自动递增IDS)。

出于同样的原因 - 主题应始终在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,以避免上述问题。

来自codex:

  

before_widget - 在每个小部件之前放置的HTML(默认值:'')注意:使用sprintf作为变量   取代

所有这一切,如果你坚持在某处(而不是上述方法)提供硬编码的固定ID,你总是可以将它放在嵌套的div或{{1}在你的小部件的HTML输出中,但我认为如果你仔细阅读了这个答案 - 你现在就会避免它。

现在 - 因为你没有在你的问题中包含任何代码(这在SE上总是不好的做法) - 我可以做的更多的事情来帮助你。如果您在没有ID的情况下遇到任何针对小部件的问题 - 我建议您打开一个新问题,并在此处的评论中指出一个链接,以便我(以及其他人)可以帮助您...