实际上,通过这种方式,您无法过滤每个小部件数据。WordPress不提供任何本机方法来过滤任何小部件的最终输出。但是还有其他方法可以修改任何小部件内容-
1. Modify the widget’s source files.
显然,这不是一个好方法,因为如果WordPress或创建小部件的插件更新,您的修改将丢失。
2. Copy the widget into your own plugin or theme and modify it there.
3. Replace the widget’s original display callback function with a custom function, which then runs the original display callback function, but with filters.
基本上,小部件的原始显示回调函数被一个新的自定义函数覆盖,该函数运行小部件的原始回调函数,但使用输出缓冲来捕获输出,并在显示之前通过过滤器运行它。我明白了
here 下面是可以在主题或插件中使用的代码,它将提供
widget_output
过滤器,以及小部件类型和唯一小部件ID作为参数:
首先,我们需要用自己的自定义函数替换小部件原来的显示回调函数:
function the_dramatist_filter_dynamic_sidebar_params( $sidebar_params ) {
if ( is_admin() ) {
return $sidebar_params;
}
global $wp_registered_widgets;
$widget_id = $sidebar_params[0][\'widget_id\'];
$wp_registered_widgets[ $widget_id ][\'original_callback\'] = $wp_registered_widgets[ $widget_id ][\'callback\'];
$wp_registered_widgets[ $widget_id ][\'callback\'] = \'the_dramatist_custom_widget_callback_function\';
return $sidebar_params;
}
add_filter( \'dynamic_sidebar_params\', \'the_dramatist_filter_dynamic_sidebar_params\' );
接下来,我们需要创建前面代码块中引用的函数,该函数将依次运行小部件的原始显示回调函数,但将使用PHP输出缓冲捕获其输出。然后
widget_output
过滤器将在小部件生成的HTML标记上运行,然后输出到页面:
function the_dramatist_custom_widget_callback_function() {
global $wp_registered_widgets;
$original_callback_params = func_get_args();
$widget_id = $original_callback_params[0][\'widget_id\'];
$original_callback = $wp_registered_widgets[ $widget_id ][\'original_callback\'];
$wp_registered_widgets[ $widget_id ][\'callback\'] = $original_callback;
$widget_id_base = $wp_registered_widgets[ $widget_id ][\'callback\'][0]->id_base;
if ( is_callable( $original_callback ) ) {
ob_start();
call_user_func_array( $original_callback, $original_callback_params );
$widget_output = ob_get_clean();
echo apply_filters( \'widget_output\', $widget_output, $widget_id_base, $widget_id );
}
}
有了它,您可以在插件或主题中执行类似操作,以修改任何小部件的输出:
function the_dramatist_widget_output_filter( $widget_output, $widget_id_base, $widget_id ) {
/* To target a specific widget ID: */
if ( \'target_widget_id\' == $widget_id ) {
// Apply your desired search and replace operations here
}
return $widget_output;
}
add_filter( \'widget_output\', \'the_dramatist_widget_output_filter\', 10, 3 );
希望以上帮助。