我正在编写带有小部件的Wordpress插件。在我的jQuery代码中,我想指向那个小部件,所以我给它一个 HTML ID 会很好。 (已编辑,感谢您指出。)
在互联网(和Codex)上进行一些搜索后,我知道我可以将ID提供给主题中的小部件,但这不是我想要的。这种方法有缺陷。更改主题可能会导致错误(当然, 我 知道必须在 functions.php 中更改它,但它只是meh)。另一件事是我的小部件有一个可能在我不知情的情况下改变的数字。
因此,为了100%确定它是否有效并且将来有效,我可以将我的小部件我自己的ID ?
答案 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的情况下遇到任何针对小部件的问题 - 我建议您打开一个新问题,并在此处的评论中指出一个链接,以便我(以及其他人)可以帮助您...