Невозможно получить сообщения, используя категории CPT - PullRequest
0 голосов
/ 24 ноября 2018

Я зарегистрировал CPT в теме WordPress.Я могу получать сообщения в цикле по post_type, но когда я пытаюсь получить сообщения по category_name.Это не дает мне результатов.

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

function achivement() {
register_post_type( 'achivement', array(
    'label'             => __( 'Achivement', 'achivement-free' ),
    'description'       => __( 'Achivement custom post type.', 'achivement-free' ),
    'public'            => false,
    'has_archive'       => false,
    'publicaly_queryable' => false,
    'query_var'         => false,
    'show_ui'           => true,
    'show_in_menu'      => true,
    'menu_icon'         => 'dashicons-networking',
    'show_in_nav_menus' => true,
    'show_in_admin_bar' => true,
    'hierarchical'      => true,
    'menu_position'     => 20,
    'supports'          => array(
        'title',
        'editor',
    ),
    'capability_type'   => 'post',
    'labels'            => array(
        'name'               => __( 'Achivements', 'achivement-free' ),
        'singular_name'      => __( 'Achivement', 'achivement-free' ),
        'menu_name'          => __( 'Achivement', 'achivement-free' ),
        'all_items'          => __( 'Achivements', 'achivement-free' ),
        'add_new'            => __( 'Add Achivement', 'achivement-free' ),
        'add_new_item'       => __( 'Add Achivement', 'achivement-free' ),
        'edit'               => __( 'Edit', 'achivement-free' ),
        'edit_item'          => __( 'Edit Achivement', 'achivement-free' ),
        'new_item'           => __( 'New Achivement', 'achivement-free' ),
        'search_items'       => __( 'Search Achivements', 'achivement-free' ),
        'not_found'          => __( 'No Achivements found', 'achivement-free' ),
        'not_found_in_trash' => __( 'No Achivements found in Trash', 'achivement-free' ),
        'parent'             => __( 'Parent Achivements', 'achivement-free' ),
    )
) );

register_taxonomy(
    'achivement-category',
    'achivement',
    array(
        'label' => __( 'Category' ),
        'rewrite' => array( 'slug' => 'achivement-category' ),
        'hierarchical' => true,
    )
);
}

, и вот цикл, который я пишу для извлечения сообщений по категориям в WordPress.

$posts = get_posts(array(
    'post_status' => 'publish',
    'posts_per_page'    => -1,
    'post_type'         => 'achivement',
    'order' => 'ASC',
));
if( $posts ):
foreach( $posts as $post ): 
    setup_postdata( $post );
    var_dump(get_the_category());
 endforeach; 
wp_reset_postdata();
endif;

Я знаю, может быть, будетглупая незначительная ошибка, но я не могу ее получить.Пожалуйста, дайте мне знать, если вы можете найти эту ошибку.Я буду очень благодарен.

Спасибо

Получил ответ на рабочий запрос снизу.Я вставляю это здесь для других.

$args = array(
'post_type' => 'achivement',
'posts_per_page' => 500,
'tax_query' => array(
    array(
        'taxonomy' => 'strike',
        'field'    => 'slug',
        'terms'    => array( 'strike-1' ),
    ),
    ),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post();
        echo get_the_title().'<br />';
    endwhile;
    wp_reset_postdata();
else :
    _e( 'Sorry, no posts matched your criteria.' );
endif;

1 Ответ

0 голосов
/ 24 ноября 2018

Прежде всего, не используйте 'posts_per_page' => -1,, это серьезно влияет на скорость запроса.

Во-вторых, просто используйте WP_Query и укажите параметр таксономии, как описано здесь: https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

Как-то так должно работать

$args = array(
    'post_type' => 'achivement',
    'posts_per_page' => 500,
    'tax_query' => array(
        array(
            'taxonomy' => 'achivement-category',
            'field'    => 'name',
        ),
    ),
);

$query = new WP_Query( $args );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...