user
  • 0
Гуру

Циклический просмотр пользовательских типов сообщений и возврат результатов только в заданной таксономии

  • 0

Я создаю тему WordPress для звукозаписывающей компании. Одним из аспектов является видеогалерея.

Я создал галерею, используя пользовательский тип сообщений под названием «видео». Код ниже — это то, что я поместил в свой файл functions.php для настройки типа записи:

add_action( 'init', 'create_my_post_types' );
        function create_my_post_types() {

register_post_type( 'videos',
        array(
            'labels' => array(
                'name' => __( 'Videos' ),
                'singular_name' => __( 'Video' ),
                'add_new' => 'Add New Video',
                'edit' => 'Edit Video'
            ),
            'public' => true,
            'exclude_from_search' => false,
            'supports' => array( 'title', 'editor', 'thumbnail','page-attributes','excerpt' ),
            'rewrite' => array( 'slug' => 'videos', 'with_front' => false ),

        ));
    }

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

 add_action( 'init', 'create_videos_taxonomies' );

    function create_videos_taxonomies() {

        register_taxonomy(
            'artist',
            'videos',
            array( 
                    'hierarchical' => false,
                    'label' => 'Artist',
                    'query_var' => true,
                    'show_tagcloud' => true,
                    'show_ui' => true,
                    'rewrite'=>array('slug' => 'artists', 'with_front' => false)
                  )
            );
        }

На данный момент все работает нормально на бэкэнде, и страница видео успешно возвращает все видео.

В другом разделе моего веб-сайта у меня есть страницы для каждого исполнителя. На любой из этих страниц исполнителя я хотел бы иметь возможность просмотреть все видео в пользовательском типе сообщений, который я создал, и возвращать результаты только в заданной таксономии. Ниже приведен мой код для циклического просмотра пользовательского типа сообщения:

<?php $loop = new WP_Query( array( 'post_type' => 'videos', 'post_child' => 0, 'posts_per_page' => 5 ) ); ?>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_post_thumbnail( 'video' ); ?>
<?php the_content(); ?> 
<?php endwhile; ?>

Это успешно перебирает видео и возвращает 5 самых последних. Мне нужно это, чтобы просмотреть все видео с определенным слагом или идентификатором таксономии. Например, я создал таксономию под названием «Smash Palace», и у нее есть слаг «smash-palace» и идентификатор «17». Любая идея, как я могу зациклить этот пользовательский тип сообщения и возвращать результаты только в данной таксономии?

Share
  1. Проверьте документацию здесь:

    http://codex.wordpress.org/Function_Reference/WP_Query#Taxonomy_Parameters

    Вы захотите добавить это в свой wp_query:

    'smash-palace' => 'smash-palace'
    

    Другими словами, ваш новый запрос будет выглядеть примерно так:

    $loop = new WP_Query( array( 'post_type' => 'videos', 'artists' => 'smash-palace', 'post_child' => 0, 'posts_per_page' => 5 ) );
    

    РЕДАКТИРОВАТЬ: я ответил на этот вопрос, исходя из предположения, что «Smash Palace» на самом деле не отдельная таксономия, а термин в вашей существующей таксономии «Исполнители». Если «Smash Palace» на самом деле является отдельной таксономией, то должно работать следующее:

    $args = array (
       'tax_query' => array (
          array (
             'post_type' => 'videos',
             'taxonomy' => 'smash-palace',
             'field' => 'slug',
             'terms' => 'slug-of-your-term'
          )
       )
    );
    
    $query = new WP_Query( $args );
    
    if( $query->have_posts() ) {
       while ( $query->have_posts() ) : $query->the_post();
          // output your stuff
       endwhile;
    }
    

    Я заметил одну вещь: если вы не определяете «термины» в tax_query массиве, вы можете получить неожиданные результаты (или вообще ничего).

    Вы можете запросить несколько терминов одновременно следующим образом:

    $args = array (
       'tax_query' => array (
          ...
          'terms' => array ( 'slug-of-term-one', 'slug-of-term-two' )
       )
    )
    

    Я надеюсь, что это поможет — дайте мне знать, правильно ли я понял ваш вопрос.

    • 0

Оставить ответ

You must login to add an answer.