如何在functions.php上使用多个pre_get_posts?

时间:2016-05-26 12:27:12

标签: php wordpress

我会尽力解释(对不起,如果我的英语不好,这不是我的母语):

我有两种自定义帖子类型和两种自定义帖子类型存档页面。

要过滤那些页面中显示的帖子,我在functions.php文件中创建了两个不同的函数,其中包含“pre_get_posts”函数,如下面的代码所示。

我的functions.php:

add_action('pre_get_posts', 'my_pre_get_posts'); 
function my_pre_get_posts( $query ) {

some code here...

}

add_action('pre_get_posts', 'my_pre_get_posts_2');
function my_pre_get_posts_2( $query ) {

some code here...

}

问题是第二个函数(my_pre_get_posts_2)正在覆盖第一个函数(my_pre_get_posts),第一个函数不能用于自定义帖子类型存档页面。

我尝试使用is_post_type_archive( 'custom_post_type' ),但第一个功能仍无效。

我需要做的是将第一个功能仅分配给特定的自定义帖子类型存档页面,而不是在任何其他页面上调用它?

1 个答案:

答案 0 :(得分:1)

这包括in the Codex。你应该使用一个回调:

function my_pre_get_posts( $query ){
    if ( is_post_type_archive('cpt_1') ) {
        // Do stuff for a custom post type
    } elseif ( is_post_type_archive('cpt_2') ) {
        // Do stuff for a different custom post type
    }
}
add_action('pre_get_posts', 'my_pre_get_posts');