0

wordpress テーマのプラグインでカスタム分類法を作成しました。プラグインがアクティブ化された後、カスタム投稿タイプの管理セクションに移動すると、サイトのすべての投稿とページが表示されます。また、カスタム投稿タイプの管理領域からこれらの投稿とページを削除しようとすると、「無効な投稿タイプ」というエラーが表示されます。誰かがこれが起こった経験があり、解決策はありますか?

'code'add_action ('init', 'create_post_type' );

function create_post_type() {

register_post_type( 'my_slide',

    array(

        'labels' => array(
            'name' => __( 'Slides' ),
            'singular_name' => __( 'Slide' ),
            'add_new' => 'Add New',
            'add_new_item' => 'Add New Slide',
            'edit' => 'Edit',
            'edit_item' => 'Edit Slide',
            'new_item' => 'New Slide',
            'view' => 'View',
            'view_item' => 'View Slide',
            'search_items' => 'Search Slides',
            'not_found' => 'No Slides found',
            'not_found_in_trash' => 'No Slides found in Trash',
            'parent' => 'Parent Slide'
        ),

    'public' => true,
    'has_archive' => true,
    'show_ui' => true,  
    'capability_type' => 'post',  
    'hierarchical' => false,  
    'rewrite' => true,
    'map_meta_cap' => true,
    'query_var' => false,
    'register_meta_box_cb' => 'slide_meta_box_add',
    'supports' => array('title', 'editor', 'thumbnail', 'post-formats', 'Custom            Featured Image links')

    )
);



}

add_action( 'init', 'create_slider_taxonomies', 0 );

function create_slider_taxonomies() {
register_taxonomy(
    'slider_category',
array( 'my_slide' ),
    array(
        'labels' => array(
            'name' => 'Slide Category',
            'add_new_item' => 'Add New Slide Category',
            'new_item_name' => 'New Slide Category Name'
        ),
        'show_ui' => true,
        'show_tagcloud' => false,
    'show_admin_column' => true,
        'hierarchical' => true
    )
);

}'code'
4

1 に答える 1

1

ご指摘のとおり、問題はpre_get_posts()管理領域が表示されているかどうかを確認していないことにありました。これは、条件を使用してテストできますis_admin()

function add_post_types_to_query( $query ) {
    if ( (!is_admin()) && $query->is_main_query() )
        $query->set( 'post_type', array( 'post', 'video' ) ); //video is a custom post type
    return $query;
}
add_action( 'pre_get_posts', 'add_post_types_to_query' );

上記により、すべての管理エリアに投稿が表示されなくなります。

他にも確認したい条件がいくつかあります。上記で、ページへのリンクが機能しなくなるという問題がありました。これは、投稿ページかどうかを確認することで解決されますis_archive()。これにより、カスタム投稿タイプがホームページに表示されない場合があります。is_home()これは、関数に条件を追加することで解決できます。

最終的な pre_get_posts 関数は次のようになります。

function add_post_types_to_query( $query ) {
    if ( (!is_admin()) && $query->is_main_query() )
        if ( $query->is_archive() || $query-> is_home() ) { 
            $query->set( 'post_type', array( 'post', 'video' ) ); //video is a custom post type
        }
    return $query;
}
add_action( 'pre_get_posts', 'add_post_types_to_query' );

今後この記事を見ている方の参考になれば幸いです。

于 2015-01-05T12:48:20.167 に答える