2

WP管理パネルには、「親」ドロップダウンリストのある「属性」メタボックスがあります。並べ替えパラメータを変更して、親の投稿のみを表示する必要があります。ネイティブWPファイルmeta-boxes.phpの621行目を変更すればそれができるかもしれません。次のコード:

$dropdown_args = array(
    'post_type'        => $post->post_type,
    'exclude_tree'     => $post->ID,
    'selected'         => $post->post_parent,
    'name'             => 'parent_id',
    'show_option_none' => __('(no parent)'),
    //Remove existing sort
    //'sort_column'      => 'menu_order, post_title',
    'echo'             => 0,
    //Add my options
    'parent'           => 0,
    'sort_order'       => 'DESC',
    'sort_column'      => 'post_date',
);

これを使用すると、すべて完璧に機能します。しかし、私はそれをフックする必要があります。私はそれを行うためにactiontを作成しましたが、機能しません:

add_action('page_attributes_meta_box', 'custome_page_attributes_meta_box');
function custome_page_attributes_meta_box($post) {
    $post_type_object = get_post_type_object($post->post_type);
    if ( $post_type_object->hierarchical ) {
        $dropdown_args = array(
            'post_type'        => $post->post_type,
            'exclude_tree'     => $post->ID,
            'selected'         => $post->post_parent,
            'name'             => 'parent_id',
            'show_option_none' => '(no parent)',
            'echo'             => 0,
            'sort_order'       => 'DESC',
            'sort_column'      => 'post_date',
            'parent'           => 0
        );

        $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post );
        $pages = wp_dropdown_pages( $dropdown_args );
        if ( ! empty($pages) ) {
        ?>
            <p><strong><?php _e('Parent') ?></strong></p>
            <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
            <?php echo $pages; ?>
        <?php
        } // end empty pages check
    } // end hierarchical check.
}

私が間違っていることは何ですか?

4

2 に答える 2

4

あなたは存在しない行動に引っ掛かろうとしています。
コアファイルでは、とを探す必要がdo_actionありapply_filtersます。
この場合、まさに必要なものがあります。

add_filter( 'page_attributes_dropdown_pages_args', 'filter_dropdown_so_14880043', 10, 2 );

function filter_dropdown_so_14880043( $dropdown_args, $post )
{
    $my_args = array(
         'post_type'        => $post->post_type,
         'exclude_tree'     => $post->ID,
         'selected'         => $post->post_parent,
         'name'             => 'parent_id',
         'show_option_none' => '(no parent)',
         'echo'             => 0,
         'sort_order'       => 'DESC',
         'sort_column'      => 'post_date',
         'parent'           => 0
    );
    return $my_args;
}
于 2013-02-14T23:11:26.493 に答える
2

私はこの質問が古いことを知っています。しかし、私は以前のすべての議論を維持し、プライベートな投稿を表示するためのより簡単な解決策を見つけました:

add_filter( 'page_attributes_dropdown_pages_args', 'wpse_984638_show_private_pages_in_dropdown', 10, 2 );

function wpse_984638_show_private_pages_in_dropdown( $args, $post ) {
    $args['post_status'] = array('publish', 'private');
    return $args;
}
于 2014-04-07T17:50:35.060 に答える