フィルタを使用する場合
add_filter('widget_display_callback', 'function_name');
function function_name($instance) {
/* Some Code */
return $instance;
}
特定のウィジェットインスタンスがfunction_name
内にあるサイドバーの名前やIDを特定することは可能ですか?
widget_display_callback
でわかるように、/wp-includes/widgets.php
フックは3つの引数を取ります。 (行180、WP 3.4.2)
$instance = apply_filters('widget_display_callback', $instance, $this, $args);
だから、完全なフックを作るために、コードは次のとおりです。
// Priority = 10 // Arguments = 3
add_filter('widget_display_callback', 'wpse_57546_widget_display_callback', 10, 3);
// Using "$this" as an argument produces errors,
// as it is a reference to the current object
// see http://stackoverflow.com/q/1523479/1287812
// hence it is renamed to "$thiz"
function wpse_57546_widget_display_callback( $instance, $thiz, $args )
{
/* Some Code */
return $instance;
}
FirePHP を使用すると、このフィルタはフロントエンドに表示されているすべてのウィジェットで実行され、以下はウィジェット "Categories"の値です。
$instance = array(
['title'] =>
['count'] => 0
['hierarchical'] => 0
['dropdown'] => 0
)
$thiz = WP_Widget_Categories(
id_base = 'categories'
name = 'Categories'
widget_options = array(
['classname'] => 'widget_categories'
['description'] => 'A list or dropdown of categories'
)
control_options = array(
['id_base'] => 'categories'
)
number = 2
id = 'categories-2'
updated =
option_name = 'widget_categories'
)
$args = array(
['name'] => 'Main Sidebar'
['id'] => 'sidebar-1'
['description'] =>
['class'] =>
['before_widget'] => '<aside id="categories-2" class="widget widget_categories">'
['after_widget'] => '</aside>'
['before_title'] => '<h3 class="widget-title">'
['after_title'] => '</h3>'
['widget_id'] => 'categories-2'
['widget_name'] => 'Categories'
)
探している値は$args
内にあります。
$args['id']
$args['widget_id']
$thiz
の値にアクセスするには、次のようにします。
$thiz->id_base
$thiz->widget_options['classname']