首页 > 解决方案 > Wordpress - wp_query 中的动态自定义帖子类型

问题描述

我们都知道,在创建新的自定义帖子类型时,如果我们想查询该特定自定义帖子类型的数据库,我们必须在其中指定名称:

一种自定义帖子类型:

'post_type' => 'NAMECPT_ONE',

两个或多个自定义帖子类型

'post_type' => array('NAMECPT_ONE, NAMECPT_TWO'),

现在我想知道是否存在一种方法来创建新的自定义帖子类型,而不是通过添加来修改所有查询,NAMECPT_THREE可以拉出整个自定义帖子类型列表并将其动态插入post_type

这是可能的?

方法创建新cpt:

/*
 * CREZIONE CUSTOM POST TYPE - SUITE
 */
add_action('init', 'crea_eventi_suite');
function crea_eventi_suite() {
    $labels = array(
        'name'               => __('Suite' , 'suite-plugin'),
        'singular_name'      => __('Suite' , 'suite-plugin'),
        'add_new'            => __('Aggiungi Evento', 'suite-plugin'),
        'add_new_item'       => __('Aggiungi Nuovo Evento' , 'suite-plugin'),
        'edit_item'          => __('Modifica Evento', 'suite-plugin'),
        'new_item'           => __('Nuovo Evento', 'suite-plugin'),
        'all_items'          => __('Tutti gli eventi Suite', 'suite-plugin'),
        'view_item'          => __('Vedi Eventi Suite' , 'suite-plugin'),
        'search_items'       => __('Cerca Evento Suite' , 'suite-plugin'),
        'not_found'          => __('Evento Non Trovato', 'suite-plugin'),
        'not_found_in_trash' => __('Evento Non Trovato nel cestino', 'suite-plugin'),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'rewrite'            => array('slug' => 'eventi-suite'),
        'has_archive'        => true,
        'hierarchical'       => true,
        'menu_position'      => 22,
        'menu_icon'          => 'dashicons-welcome-write-blog',
        'supports'           => array(
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'page-attributes'
        ),
    );
    register_post_type('eventi-suite', $args);
}

标签: wordpresscustom-post-type

解决方案


你可以这样使用

/*
 * CREZIONE CUSTOM POST TYPE - SUITE
 */
add_action('init', 'crea_eventi_suite');
function crea_eventi_suite() {
    $labels = array(
        'name'               => __('Suite' , 'suite-plugin'),
        'singular_name'      => __('Suite' , 'suite-plugin'),
        'add_new'            => __('Aggiungi Evento', 'suite-plugin'),
        'add_new_item'       => __('Aggiungi Nuovo Evento' , 'suite-plugin'),
        'edit_item'          => __('Modifica Evento', 'suite-plugin'),
        'new_item'           => __('Nuovo Evento', 'suite-plugin'),
        'all_items'          => __('Tutti gli eventi Suite', 'suite-plugin'),
        'view_item'          => __('Vedi Eventi Suite' , 'suite-plugin'),
        'search_items'       => __('Cerca Evento Suite' , 'suite-plugin'),
        'not_found'          => __('Evento Non Trovato', 'suite-plugin'),
        'not_found_in_trash' => __('Evento Non Trovato nel cestino', 'suite-plugin'),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'rewrite'            => array('slug' => 'eventi-suite'),
        'has_archive'        => true,
        'hierarchical'       => true,
        'menu_position'      => 22,
        'menu_icon'          => 'dashicons-welcome-write-blog',
        'supports'           => array(
            'title',
            'editor',
            'thumbnail',
            'excerpt',
            'page-attributes'
        ),
    );
   update_option('customer_postquery',get_option('customer_postquery')+',new-post_type');

    register_post_type('eventi-suite', $args);
}

现在,当您想显示帖子时,可以像这样使用

 $args = array(  
       'post_type' => get_option('customer_postquery'),
       'post_status' => 'publish',
       'posts_per_page' => 8,
       ‘orderby’ => ‘title’,
       ‘order’ => ‘ASC’,
   );

   $loop = new WP_Query( $args );

推荐阅读