我即将开始我的第一个WordPress项目,我的任务是将覆盖核心的定制核心代码移动到单独的函数/文件中(这样在将来升级时更容易维护)。
我一直在做研究add_filter
和apply_filter
和do_action
和add_action
似乎是要走的路。但我仍然不确定它们是如何工作的。这些方法是我用来覆盖核心方法的吗?我很困惑,因为add_filter
使用单词add
当我觉得这更符合replace
或overwrite
(除非我有误解)
我刚读了第一个答案this (关于玉米饼的那篇)
因此,作者在描述如何使用add\\u过滤器时使用了三个步骤:
Step 1: $taco变量的静态值
<?php $taco = \'chicken\'; ?>
Step 2: <?php
$taco = apply_filters( \'get_taco\', \'chicken\' );
?>
Step 3:
<?php
add_filter( \'get_taco\', \'my_special_order\' );
function my_special_order( $content ) {
return \'shredded beef\';
}
?>
所以在这种情况下
apply_filter
只需动态创建一个方法并使其返回
chicken
一串或者这里假设有一个核心WordPress方法
get_taco
使用
apply_filter
是否有助于覆盖原始功能?
还有,你只能apply_filter
你已经add_filter
埃德?换句话说apply_filter(\'get_taco\');
如果我没有定义,则不起作用add_filter(\'get_taco\', \'my_special_order\');
和function my_special_order ($content) ...
第一
我是否在函数中放置这些过滤器。php文件?很抱歉问你这么多问题,我来自Ruby on Rails,所以我对WordPress一无所知。
最合适的回答,由SO网友:s_ha_dum 整理而成
我很困惑,因为add\\u filter在我觉得更像是替换或覆盖时使用了add这个词(除非我有误解)
你误会了。二者都add_action
和add_filter
将函数回调插入到一种队列中。您可以向同一个挂钩添加许多回调,它们将按照添加的顺序触发,除非优先级包含在第三个参数中。
因此,在这种情况下,apply\\u过滤器是否只是动态创建一个动态方法,并使其返回chicken字符串?
apply_filters
-- 注意,“s”或多或少创建了过滤器,但通常会传递一个变量而不是字符串,该变量会传递给回调函数,然后回调函数会修改它并返回它。
过滤器“slug”通常不是WordPress核心函数或方法的名称,尽管有些函数具有相同名称的过滤器。例如the_content()
调用the_content
滤器
钩子通常不会覆盖整个函数,只覆盖其中的一部分,但也存在异常和近似异常。
此外,您是否只能应用已添加\\u筛选的内容?
不,相反。你只能add_filter
一些apply_filter
ed.您可以使用add_filter(\'whatever\',\'abc\');
但如果没有apply_filter(\'whatever\',...
在某处
几乎同样的情况也适用于add_action
/do_action
但行动是为了做事,而不是为了回报价值。
钩子在页面加载中的不同时间以及函数和方法中的不同位置执行。例如save_post
在接近结束时执行wp_insert_post
虽然pre_get_posts
在接近get_posts
的方法WP_Query
班其他在中执行the middle of the page load 而不是在函数或方法中。它们在需要(由开发人员确定)更改或添加信息、运行其他功能、重定向页面等的地方执行。
更多信息
Difference Between Filter and Action Hooks?
SO网友:Krzysiek Dróżdż
我想你弄错了一点。
过滤器和动作是您“分配”给挂钩的函数。WordPress在很多地方都会打电话do_action
或apply_filter
功能。这些函数的第一个参数是hook name。
例如,当你看到
do_action(\'blabla\');
这意味着将调用分配给“blabla”挂钩的所有操作。
add_filter
和add_action
不会覆盖任何内容。它完全按照它所说的做-它将您的函数分配给给定的钩子。
所以你的第二步。应用筛选器get_taco
到静态值chicken
. 应用过滤器是指它调用分配给get_taco
钩
您的步骤3。创建新函数my_special_order
并将其分配给get_taco
钩所以只要有apply_filter(\'get_taco\')
调用,将调用您的函数。
如果没有为给定的钩子分配过滤器/操作,则不会执行任何操作。
您可以在此处阅读有关此主题的更多信息:http://codex.wordpress.org/Plugin_API