Wordpress:pre_get_posts并将author.php中的参数传递给function.php

时间:2014-07-13 10:08:20

标签: php wordpress

我试图让pre_get_posts与传递参数一起工作。我在我的主题的function.php文件中有以下功能。

function cpt_on_author_page( $query, $user_id ) {   
    if ( $query->is_author() && $query->is_main_query() ) {
        $query->set( 'post_type', 'programs' );
        $query->set( 'posts_per_page', 1 );
        $query->set( 'meta_key' , 'show_program_editors');
        $query->set( 'meta_value' , $user_id);              
    }
}
add_action( 'pre_get_posts', 'cpt_on_author_page' );

我通过我的author.php文件通过以下代码调用此函数:

 do_action( 'pre_get_posts',$user_id );

在输出页面上,我正在

 Missing argument 2 for cpt_on_author_page()

我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试将第1行更改为function cpt_on_author_page( $query ) {

如果您需要在函数中使用$user_id(当前作者的ID),您应该可以执行以下操作:

$author = get_user_by( 'slug', get_query_var( 'author_name' ) );
$user_id = $author->ID;

您根本不需要do_action( 'pre_get_posts',$user_id );

更新(在此回答的评论中讨论后):

要在kam的作者存档中显示元数值为kam的所有帖子,您可以执行以下操作:

function cpt_on_author_page( $query ) {

    if ( $query->is_author() ) {

        $users = get_users();
        $ids = array();
        foreach ( $users as $user ) {
            $ids[] = $user->ID;
        }
        $query->set( 'author__in' , $ids ); 

        $author = get_user_by( 'slug', get_query_var( 'author_name' ) );
        $query->set( 'meta_value' , $author->user_login );

    }
}
add_action( 'pre_get_posts', 'cpt_on_author_page' );

注意:这假定每个作者的nicename与其用户名相同。