问题描述
我有一个案例,这是几个自定义侧边栏中的很多小工具。我想知道是否有一个简单的方式动态地改变每个小工具的标题。通常,小工具具有您可以手动设置或插件本身设置的标题字段。
我希望每个帖子将元字段值添加到每个小工具标题中。
这个逻辑会是这样的:
$dynamic_title = get_the_title();
// add a filter to change the widget titles per post value
//
// The widget title would be something like "Recent Posts for $dynamic_title"
我知道有一个 widget_title
过滤器,但是如何定位特定的小工具?
PS 。由于有许多小工具需要特定的标题,因此我无法使用常规的 register_sidebar
参数。
最佳解决方案
您可以使用 widget_display_callback
(可以预见,在显示窗口小工具之前触发)) 。
add_filter('widget_display_callback','wptuts54095_widget_custom_title',10,3);
function wptuts54095_widget_custom_title($instance, $widget, $args){
if ( is_single() ){
//On a single post.
$title = get_the_title();
$instance['title'] = $instance['title'].' '.$title;
}
return $instance;
}
$widget
参数是您的窗口小工具类的对象,因此 $widget->id_base
将包含窗口小工具的 ID(如果定位到特定的窗口小工具类) 。
次佳解决方案
您可以使用自己的钩子进行 widget_title
动作。您可以通过 $id_base
参数确定特定的小工具,该参数作为第三个参数传递给钩子。它应该像这样工作:
function myplugin_widget_title( $title, $instance, $id_base ) {
if ( !is_single() ) {
return $title;
}
$post_title = get_the_title();
switch ( $id_base ) {
case 'pages': return sprintf( '%s "%s"', $title, $post_title );
case 'links': return sprintf( 'Links for "%s" post.', $post_title );
// other widgets ...
default: return $title;
}
}
add_filter( 'widget_title', 'myplugin_widget_title', 10, 3 );
对于自定义小工具,您需要将此过滤器应用于小工具的标题才能回显 (as shown the default widgets):
$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base);
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。