这个钩子的生效时间是 wordpress 从数据库取出文章 POST 的时候。相比” the_title”,”the_content” 来说更早。之前做自动机器翻译的插件时候,一直用的是 add_filter(‘the_content’, array($this, ‘post_content_wrap’),1,1) 和 add_filter(‘the_title’, array($this, ‘post_wrap’), 1, 2) 。后面发现对一些模板死活不生效。原因就在于,有些模板直接用 WP query 从数据库读数据,而不是使用 get_title 之类的现成函数,那么 the_title 和 the_content 的钩子就会失效。
而 post_results 就简单了,从数据库中读出来的时候直接操作。
function my_posts_results_filter( $posts ) { $filtered_posts = array(); foreach ( $posts as $post ) { if ( false === strpos($post->post_title, 'selfie')) { // safe to add non-selfie title post to array $filtered_posts[] = $post; } } return $filtered_posts ; } add_filter( 'posts_results', 'my_posts_results_filter',1,1);
用法详解:
add_filter( 'posts_results', ' 执行的函数名 ', 优先级 , 传入的参数数 ); 优先级默认是 10 ,如果大家都是 10 ,就是按代码的先后执行。我是做内容翻译,所以把优先级设到最高,这样别人处理的就是我已经翻译过的内容了。 post_results 的传入参数个数是 1. 不能改。传入的就是 POST 数组。 其实 WordPress 的功能非常强大,插件的接口也非常多,我看了一下午文档才找到这个符合我需求的接口。