操作(&A);过滤器最好的方法是使用动作将插件功能引入主题。
示例#1这里有一个小插件来测试这一点。
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( \'wpse68117_say\', \'wpse68117_print_hello\' );
主题内部:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( \'wpse68117_say\' );
现在发生了什么/kool kid这样我们就不必检查函数、文件、类、方法甚至是(不要这样做!)全球的
$variable
. WP intern global已经为我们提供了这一功能:它检查挂钩名称是否是当前过滤器,并附加它。如果它不存在,什么也不会发生。
示例#2
在我们的下一个插件中,我们附加了一个接受一个参数的回调函数。
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( \'wpse68117_say_thing\', \'wpse68117_print_thing_cb\' );
主题内部:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( \'wpse68117_say_thing\', \'World\' );
这一次,我们为用户/开发人员提供了添加参数的可能性。他也可以
echo/print
输出,甚至进一步处理它(如果您得到一个数组作为回报)。
示例#3
对于第三个插件,我们附加了一个带两个参数的回调函数。
<?php
/** Plugin Name: (#68117) Print Alot! */
function wpse68117_alot_cb( $thing, $belongs = \'is mine\' )
{
return "Hello! The {$thing} {$belongs}";
}
add_filter( \'wpse68117_grab_it\', \'wpse68117_alot_cb\' );
主题内部:
<?php
/** Template Name: Test »Print Alot!« Plugin */
get_header();
// Now we call the plugins hook
$string_arr = implode(
" "
,apply_filter( \'wpse68117_grab_it\', \'World\', \'is yours\' )
);
foreach ( $string_arr as $part )
{
// Highlight the $thing
if ( strstr( \'World\', $part )
{
echo "<mark>{$part} </mark>";
continue;
}
echo "{$part} ";
}
这个插件现在允许我们插入两个参数。我们可以把它保存到
$variable
并进一步处理。
结论:通过使用过滤器和操作,您可以避免不必要的检查,从而获得更好的性能(比较function_*/class_*/method_*/file_exists
或使用in_array()
约1k(?)筛选搜索)。您还可以避免所有那些不必要的关于未设置变量等的通知,因为插件关心这一点。