私はそれがいくつかのカスタムサイドバーの中のたくさんのウィジェットである場合があります。各ウィジェットのタイトルを動的に変更する簡単な方法があるかどうか私は思っています。通常、ウィジェットには手動で、またはプラグイン自体に設定できるタイトルフィールドがあります。
各ウィジェットのタイトルに、投稿ごとのメタフィールド値のようなものを追加したいと思います。
ロジックは次のようになります。
$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
アクションのためにあなた自身のフックを使うことができます。フックの3番目の引数として渡される$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 );
カスタムウィジェットの場合は、エコーする前にこのフィルターをウィジェットのタイトルに適用する必要があります( デフォルトのウィジェットとして表示されるように )
$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base);