web-dev-qa-db-ja.com

管理者のpost_parentで投稿をフィルタリングするにはどうすればいいですか?

私は このチュートリアル そして このチュートリアル に従って、カスタム投稿タイプ編集画面にカスタムコラムを追加し、各投稿の投稿の親を表示します。私の質問:標準の投稿の管理画面の[カテゴリ]列のように、投稿の親をクリック可能にして、特定の投稿の親をクリックしたときに、そのカテゴリの投稿だけが編集画面に表示されるようにする方法を教えてください。

Scribuのチュートリアルに従って、列には投稿の親のタイトルが表示されます。

function manage_mytype_columns( $column, $post_id ) {
global $post;
        $pp_id = get_post($post_id)->post_parent; /*The post parent id is stored also as post meta, so I could also use $pp_id = get_post_meta($post_id, 'post_parent', true) ); */
        if ( empty( $pp_id ) ) {
            echo __( 'No post parent' );}
        else {
            $pp_title = get_post($pp_id)->post_title;
                            echo $pp_title; }
}
add_action( 'manage_mytype_posts_custom_column', 'manage_mytype_columns', 10, 2 );

私は欲しいものを実現しようとしました(DevPressからのチュートリアルに従うが、明らかに私がするべきことをあまり理解せずに):

function manage_mytype_columns( $column, $post_id ) {
global $post;
        $pp_id = get_post($post_id)->post_parent; /*The post parent id is stored also as post meta, so I could also use $pp_id = get_post_meta($post_id, 'post_parent', true) ); */
        if ( empty( $pp_id ) ) {
            echo __( 'No post parent' );}
        else {
            $pp_title = get_post($pp_id)->post_title;
                            $pp_url = add_query_arg(array('post_type' => $post->post_type, 'post_parent' => $pp_id), 'edit.php');
                           echo '<a href="'.$pp_url.'">'.$pp_title.'</a>'; }
}
add_action( 'manage_mytype_posts_custom_column', 'manage_mytype_columns', 10, 2 );

これにより、投稿の親がクリック可能になり、1つをクリックすると「edit.php?post_type = mytype&post_parent = post_parent_ID」のようなURLになりますが、親がいてもすべての投稿が表示されます。私は何かが足りない、おそらく何らかのクエリフックがあることを知っています(制限投稿フックについても何か読んでいます)が、これを正しく動作させるための正しい知識がありません。 :) 助けてください。 THX、ラドゥ

5
rereradu

問題は、 'post_parent'がパブリッククエリvarではないこと、つまりコードからしか使用できないことです。

URLからそれを使用することができるようにするためには、単にこれらのコード行を追加する必要があります:

function make_post_parent_public_qv() {
    if ( is_admin() )
        $GLOBALS['wp']->add_query_var( 'post_parent' );
}
add_action( 'init', 'make_post_parent_public_qv' );
6
scribu