说明
这是全局数组
$wp_filters
. 此数组存储一些子数组。每个一个
priority
. 然后,每个子数组都为添加的每个回调包含一个数组。这些子数组的键是附加的函数。
示例
如果执行以下操作,请在代码中的某个位置(最好在
init
挂钩):
echo \'<pre>\';
var_dump( $GLOBALS[\'wp_filter\'][\'the_content\'] );
echo \'</pre>\';
&hellip;然后您将看到以下内容(答案减少):
array
11 =>
array
\'capital_P_dangit\' =>
array
\'function\' => string \'capital_P_dangit\' (length=16)
\'accepted_args\' => int 1
\'do_shortcode\' =>
array
\'function\' => string \'do_shortcode\' (length=12)
\'accepted_args\' => int 1
10 =>
array
\'wptexturize\' =>
array
\'function\' => string \'wptexturize\' (length=11)
\'accepted_args\' => int 1
\'convert_smilies\' =>
array
\'function\' => string \'convert_smilies\' (length=15)
\'accepted_args\' => int 1
\'convert_chars\' =>
array
\'function\' => string \'convert_chars\' (length=13)
\'accepted_args\' => int 1
\'wpautop\' =>
array
\'function\' => string \'wpautop\' (length=7)
\'accepted_args\' => int 1
\'shortcode_unautop\' =>
array
\'function\' => string \'shortcode_unautop\' (length=17)
\'accepted_args\' => int 1
\'prepend_attachment\' =>
array
\'function\' => string \'prepend_attachment\' (length=18)
\'accepted_args\' => int 1
8 =>
array
\'000000002657b7190000000078ed2c6erun_shortcode\' =>
array
\'function\' =>
array
...
\'accepted_args\' => int 1
\'000000002657b7190000000078ed2c6eautoembed\' =>
array
\'function\' =>
array
...
\'accepted_args\' => int 1
因此,如果要将以下调用添加到某个模板中:
do_action( \'hook_name\' );
&hellip;然后,附加到此挂钩的每个回调函数都将保存在全局数组中。
// WPSE QuestionNr. Callback Function
function wpse59779_cb_fn()
{
return print \'I am now added to the template!\';
}
add_action( \'hook_name\', \'wpse59779_cb_fn\' );
这意味着我们从
var_dump
(属于
\'hook_name\'
):
array
10 =>
array
\'wpse59779_cb_fn\' =>
array
\'function\' => string \'wpse59779_cb_fn\' (length=15)
\'accepted_args\' => int 1
...etc...
发生了什么因此,如果您添加
string
通过
add_action
到某个钩子,然后基本上是将数据添加到
global
大堆
这个do_action( \'hook_name\' );
然后在全局名称空间中搜索一个函数(在本例中)并执行该函数。
问题是,您试图做很多事情,但实际上并不了解PHP的基础知识。这里有一些注释,但剩下的将是关于您和php的。净值:
add_action( \'do_xyz\', \'get_sidebar(\'secondary\')\' );
这将导致一个失败,因为您在第二次回调后在回调中结束字符串
\'
, 所以
secondary
代表其本身,可能会被视为一个常量或只是中断,因为您没有使用
.
或
,
把事情联系起来。
如何操作
如果要将侧栏(或任何其他元素)添加到挂钩,只需添加一个包装模板标记的回调函数
function wpse59779_get_sidebars()
{
return get_sidebar( \'secondary\' );
}
add_action( \'do_xyz\', \'wpse59779_get_sidebars\' );
高级钩子可以接受参数,因此您也可以使用默认值:
do_action( \'do_xyz\', \'secondary\' );
然后可以使用或修改默认值,例如条件
function wpse59779_get_sidebars( $sidebar_name )
{
return get_sidebar( $sidebar_name );
}
add_action( \'do_xyz\', \'wpse59779_get_sidebars\' );
带有条件的示例:
function wpse59779_get_sidebars( $sidebar_name )
{
if ( is_page() )
{
$sidebar_name = \'page_sidebar\';
}
elseif ( is_post() )
{
$sidebar_name = \'single_post_sidebar\';
}
return get_sidebar( $sidebar_name );
}
add_action( \'do_xyz\', \'wpse59779_get_sidebars\' );
更高级的钩子可以接受多个参数:
do_action( \'do_xyz\', \'secondary\', \'FFF\' );
具有两个参数的示例:
function wpse59779_get_sidebars( $sidebar_name, $color )
{
echo "<div style=\'background-color: #{$color};\'>Hello!</div>";
if ( is_page() )
{
$sidebar_name = \'page_sidebar\';
}
elseif ( is_post() )
{
$sidebar_name = \'single_post_sidebar\';
}
return get_sidebar( $sidebar_name );
}
add_action( \'do_xyz\', \'wpse59779_get_sidebars\', 10, 2 );
注意,我们现在得到了
add_action
呼叫:第一个是
priority
(默认值为10)何时在挂钩内执行函数,第二个是参数数。仅当参数数大于1时才需要这些参数。
希望这有助于解决问题。