TODO: To change the header's content go to Dr.Explain menu Options : Project Settings : HTML (CHM) Export : Setup HTML Template and Layout
×
Menu
Index

Sửa nội dung mọi widget

Sửa dữ liệu & tiêu đề widget:
Sử dụng hook 'widget_display_callback' để thay đổi tiêu đề widget thậm trí toàn bộ options của widget sau khi lấy ra từ database.
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;
}
Trong đó:
WP_Nav_Menu_Widget Object
(
    [id_base] => nav_menu
    [name] => Trình đơn tùy biến
    [widget_options] => Array
        (
            [classname] => widget_nav_menu
            [description] => Add a custom menu to your sidebar.
        )
 
    [control_options] => Array
        (
            [id_base] => nav_menu
        )
 
    [number] => 3
    [id] => nav_menu-3
    [updated] =>
    [option_name] => widget_nav_menu
)
 
Bằng cách thay đổi giá trị trong biến $instance đồng nghĩa dữ liệu của widget thay đổi trên website.
 
 
Sửa nội dung hiển thị mọi widget:
Bài trước chúng ta đã biết cách sửa nội dung hiển thị widget với plugin 'widget_logic' thông qua filter 'widget_content'.
Bản chất của vấn việc này là sử dụng callback để sử lý nội dung của widget, Mặc định hàm callback hiển thị nội dung widget liên kết với hàm widget($args, $instance) trong lớp tạo widget:
public function widget($args, $instance){
     ...
}
 
bằng cách thay đổi hàm  callback mặc định của widget bạn có thể sửa lại nội dung của widget:
$wp_registered_widgets[$widget_id]['callback_wl_redirect']=$wp_registered_widgets[$widget_id]['callback'];
$wp_registered_widgets[$widget_id]['callback']='hw_widget_logic_redirected_callback';
 
Gán lại vào hàm callback  cũ sau khi gọi vào callback làm mới nội dung widget, nếu không bạn sẽ gặp lỗi lặp vô hạn.
function hw_widget_logic_redirected_callback()
{   global $wp_registered_widgets, $wp_reset_query_is_done;
 
    // replace the original callback data
    $params=func_get_args();
    $id=$params[0]['widget_id'];
    $callback=$wp_registered_widgets[$id]['callback_wl_redirect'];
    $wp_registered_widgets[$id]['callback']=$callback;
 
    $callback=$wp_registered_widgets[$id]['callback'];
 
    // run the callback but capture and filter the output using PHP output buffering
    if ( is_callable($callback) )
    {   ob_start();
        call_user_func_array($callback, $params);
        $widget_content = ob_get_contents();
        ob_end_clean();
        echo apply_filters( 'mywidget_content', $widget_content, $id);
    }
}
add_filter('mywidget_content', 'make_alternating_widget_styles');
function make_alternating_widget_styles($content='',$widgetID='')
{
    if(trim(strip_tags($content))=='{dangky}'){
        $str='
        <div style="text-align:center;"><a href="'.site_url('dang-ky').'"><img src="'.get_bloginfo('stylesheet_directory').'/images/dangky.jpg"/></a></div>
        ';
        return $str;
    }
    return $content;
}
 
Chúng ta sẽ sửa callback của widget trong filter 'dynamic_sidebar_params'.
add_filter('dynamic_sidebar_params','widget_first_last_classes',10);
function widget_first_last_classes($params) {
     global $wp_registered_widgets;
     $this_id = $params[0]['id']; // Get the id for the current sidebar we're processing
     $widget_id=$params[0]['widget_id'];
     $arr_registered_widgets = wp_get_sidebars_widgets(); // Get an array of ALL registered widgets   
 
     if(!isset($arr_registered_widgets[$this_id]) || !is_array($arr_registered_widgets[$this_id])) { // Check if the current sidebar has no widgets
          return $params; // No widgets in this sidebar... bail early.
     }
     $widget_opt = get_option($widget_obj['callback'][0]->option_name);
     $widget_num = $widget_obj['params'][0]['number'];
     if (isset($widget_opt[$widget_num]['background'])){
 
             $bg = $widget_opt[$widget_num]['background'];
            $params[0]['before_widget'] = preg_replace('/class="/', 'style="background:url('.$bg.');" class="custom-field ',  $params[0]['before_widget'], 1);
    }
     $wp_registered_widgets[$widget_id]['callback_wl_redirect']=$wp_registered_widgets[$widget_id]['callback'];
     $wp_registered_widgets[$widget_id]['callback']='hw_widget_logic_redirected_callback';
   
     return $params;
}
 
 
Made with help of Dr.Explain

Unregistered version