2014-07-13 1 views
0

인수 전달과 함께 작동하도록 pre_get_posts를 얻으려고합니다. 나는 내 테마의 function.php 파일에 다음과 같은 기능을 가지고있다.Wordpress : pre_get_posts 및 author.php에서 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() 

는 무엇입니까?

답변

0

당신이 당신의 함수 내에서 $user_id (현재 저자의 ID)를 사용해야하는 경우 function cpt_on_author_page($query) {

에 라인 하나를 변경해보십시오, 당신은 같은 것을 할 수 있어야한다 :

$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'); 

Notes : 각 작성자의 닉네임이 사용자 이름과 동일하다고 가정합니다.

+0

감사합니다. 나는이 함수를 cpt_on_author_page ($ query) { $ author = get_user_by ('slug', get_query_var ('author_name')); $ user_id = $ author-> ID; if ($ query-> is_author() && $ query-> is_main_query()) { $ query-> set ('post_type', 'programs'); $ query-> set ('posts_per_page', 1); \t \t $ query-> set ('meta_key', 'show_program_editors'); \t \t $ query-> set ('meta_value', $ user_id); \t \t } } ADD_ACTION ('pre_get_posts', 'cpt_on_author_page');'하지만 저자의 이름 (캄)에 갈 때 그 – kotshiii

+0

유형의 게시물을'출판 kam' 저자를 '가지고 자사 나에게 어떤 게시물을 표시하지 'show_program_editors' 메타 키에'$ user_id' 값이 주어 졌을 때' – henrywright

+0

그쪽 저자 kam이 (가) 게시물을 게시하지 않았습니다. iam 'admin'이 게시물을 추가하고이 맘에 드는 'kam'과 같은 사용자 지정 메타 키로 저장하십시오. save_programs_meta ($ post_id = false, $ post = false) { // 게시물 유형을 확인하십시오. 교사 \t 경우 ($ 포스트> post_type == '프로그램') { \t \t update_post_meta ($ post_id를 'show_program_editors'$ _ POST [ 'show_program_editors']); \t \t update_post_meta ($ post_id, 'small_pic', $ _ POST [ 'small_pic']); \t} } – kotshiii