中的第三个字段add_filter()
是优先级。默认WP挂钩优先级为10。您可以完全忽略1,也可以通过将其作为第4个字段传递来声明函数接受的参数数。add_filter(\'excerpt_more\', \'change_excerpt_more\', 10, 1);
或默认值:add_filter(\'excerpt_more\', \'change_excerpt_more\');
<小时>
re: questions in comments
仍然在想为什么没有通过优先权它就不能工作
您正在传递优先级,您遇到的问题是您正在传递优先级(1
), 而且它可能比使用这个钩子的其他东西要低。因此,它可能运行得很好,但只是在运行后被覆盖。
这个add_filter
和add_action
方法分为四部分:
筛选器或操作,由定义apply_filters(\'name\'
..., 和do_action(\'name\'...
, 分别为要应用的回调函数change_excerpt_more()
优先级,一个整数值,默认为回调所需的参数数(由do_action
和apply_filter
)那么在你问题的例子中,你通过了1
作为优先事项,因为它在第三个领域。假设你想定义单参数($more
), 您需要显式传递优先级或空字段(wordpress将使用默认优先级)。
您的代码:
此:
add_filter(\'excerpt_more\', \'change_excerpt_more\', 1);
与以下内容相同:
add_filter(\'excerpt_more\', \'change_excerpt_more\', 1, 1);
要定义单个参数,如下所示:
add_filter(\'excerpt_more\', \'change_excerpt_more\', , 1);
这与:
add_filter(\'excerpt_more\', \'change_excerpt_more\', 10, 1);
从那以后excerpt more
只有一个参数要传递,这与:add_filter(\'excerpt_more\', \'change_excerpt_more\');
优先级成为应用于挂钩的过滤器/操作数组中的数字键。按这些数字索引排序,它们按顺序运行。因为它只是一个用作索引的(int),所以唯一的限制是PHP_INT_MAX
. Wordpress默认为10
, 允许挂钩在它们之前或之后轻松运行。在没有其他任何东西使用挂钩的情况下,默认优先级将在任何核心使用之后运行,因为它是在之后添加到挂钩的。为了确保在默认情况下添加任何内容之后运行钩子,可以传递更高的优先级。
但你的问题是你的优先级太高了(1
) 由于该值位于add_filter
. 所以它正在运行,然后任何在默认情况下挂钩的东西(可以是主题、其他插件,甚至是核心)都会在它之后运行。
要知道所有事情都与它们的优先级挂钩,你可以print_r()
$wp_filter
将钩子的名称作为数组的键传递给它。
function filter_print() {
global $wp_filter;
print_r( $wp_filter[\'excerpt_more\'] );
die();
}
add_action( \'shutdown\', \'filter_print\' );
[代码来自
Howdy_McGee 在…上
this WPSE answer]