我可能不完全理解您的问题以及 "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 - 你可以分配一个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
等等……
编辑我 - 在 cmets 之后
无论如何,恕我直言,在小部件中硬编码固定的ID 是一个坏主意,原因很简单,从开发人员的角度来看,小部件的偏好是始终允许支持多个实例。在小部件上的任何位置给出HTML ID 将导致验证错误,并且在jQuery 的情况下 - 还有JS 错误,原因很简单,如果用户将有 2 个小部件,它也会有一个重复的 ID。
换句话说 - 这与您在原始问题中的陈述完全相反。
所以为了 100% 确定它有效并且将来会有效,我可以给我的吗?
小部件我自己的 ID
为您的小部件提供一个固定的硬编码 ID 实际上将确保它不会在 100% 的时间内工作。
首选总是使用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 INSIDE 小部件中的 HTML 输出,但我认为如果你仔细阅读了这个答案 - 你现在会避免它。
现在,- 由于您没有在问题中包含任何代码(这在 SE 上始终是一种不好的做法),因此我无能为力。如果您遇到任何针对没有 ID 的小部件的问题 - 我建议您打开一个新问题,并可能在此处指向 cmets 的链接,以便我自己(和其他人)可以帮助您..