Có cách nào để tự động thay đổi tiêu đề widget?


8

Tôi có một trường hợp đó là rất nhiều widget trong một số sidebars tùy chỉnh. Tôi tự hỏi nếu có một cách đơn giản để thay đổi tiêu đề của từng widget một cách linh hoạt. Thông thường, một widget có trường tiêu đề bạn có thể đặt thủ công hoặc trên chính plugin.

Tôi muốn thêm một cái gì đó như giá trị trường meta cho mỗi bài đăng vào mỗi tiêu đề widget.

Logic sẽ là một cái gì đó như:

$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"

Tôi biết có một widget_titlebộ lọc nhưng làm thế nào để bạn nhắm mục tiêu các vật dụng cụ thể?

ps. Tôi không thể sử dụng các register_sidebartham số thông thường do có nhiều widget cần các tiêu đề cụ thể.

Câu trả lời:


8

Bạn có thể sử dụng widget_display_callback(bắn, dự đoán, ngay trước khi hiển thị một widget :)).

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;
}

Đối $widgetsố là một đối tượng của lớp widget của bạn và do đó $widget->id_basesẽ chứa ID cho widget của bạn (nếu nhắm mục tiêu một lớp widget cụ thể).


7

Bạn có thể sử dụng móc của riêng bạn cho widget_titlehành động. Bạn có thể xác định widget cụ thể bằng cách$id_base tham số được truyền dưới dạng đối số thứ ba cho hook. Nó sẽ hoạt động như thế này:

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 );

Đối với các tiện ích tùy chỉnh, bạn sẽ cần áp dụng bộ lọc này cho tiêu đề của tiện ích trước khi lặp lại nó ( như được hiển thị các tiện ích mặc định ):

$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base);

1
+1 câu trả lời gọn gàng - nhưng nó yêu cầu tiện ích để áp dụng widget_titlebộ lọc.
Stephen Harris

Trường hợp bạn có thể kiểm tra điều này với 'liên kết' mặc định, tôi không thể làm cho nó hoạt động được, có lẽ vì nó bị thiếu widget_title?
Wyck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.