Получение всех записей с определенным тегом

15 окт. 2014 г., 12:30:59
Просмотры: 47K
Голосов: 4

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

Вот мой запрос:

$original_query = $wp_query;
$wp_query = null;
$args=array(
    'posts_per_page' => -1, 
    'tag' => $post_tag
);
$wp_query = new WP_Query( $args );
$post_titles=array();
$i=0;
if ( have_posts() ) :
    while (have_posts()) : the_post();
        $post_titles[$i]=get_the_ID() ;
        $i++;
    endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();
2
Комментарии

Как вы получаете $post_tag. И ваш запрос такой же, как query_posts, который вообще не следует использовать.

Pieter Goosen Pieter Goosen
15 окт. 2014 г. 13:13:11

У меня есть конкретный тег, который я использовал статически

Antwan Antwan
15 окт. 2014 г. 13:19:03
Все ответы на вопрос 2
5

Создать новый WP_Query намного проще, чем пытаться очистить или перезаписать оригинальный запрос.

Если $post_tag - это ярлык метки (slug), вы можете просто использовать:

<?php
$the_query = new WP_Query( 'tag='.$post_tag );

if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // записи не найдены
}
/* Восстановить оригинальные данные поста */
wp_reset_postdata();
15 окт. 2014 г. 12:45:11
Комментарии

да, $post_tag — это ярлык метки, но я не понял, в чем разница в вашем коде, извините, я новичок в WordPress

Antwan Antwan
15 окт. 2014 г. 12:58:46

Основное отличие в том, что ваш код пытается обнулить основной WP Query, вместо того чтобы просто создать новый.

Courtney Ivey Courtney Ivey
15 окт. 2014 г. 13:05:09

Я получаю "записи не найдены", извините, но есть ли разница между меткой (tag) и ярлыком метки (tag slug)?

Antwan Antwan
15 окт. 2014 г. 13:09:46

В запросе можно использовать слаги или идентификаторы.

Courtney Ivey Courtney Ivey
15 окт. 2014 г. 13:12:09

сейчас это работает, но я добавил новый тег на английском, и он работает, а у меня есть теги на арабском, и с ними это не работает

Antwan Antwan
15 окт. 2014 г. 13:18:19
0

В ваш файл functions.php

/* Отображение связанных товаров */
/* ============================ */

if ( ! function_exists( 'display_related_products' ) ) {

    function display_related_products($post_tag) {
        ?>
        <div class="related-products">

            <!-- Простой WP_Query -->
            <?php
                $args = array(
                    'post_type' => 'product',
                    'tag' => $post_tag, // Здесь происходит фильтрация по нужному тегу
                    'orderby' => 'id',
                    'order' => 'ASC'
                );

                $related_products = new WP_Query( $args );
            ?>

            <?php while ( $related_products -> have_posts() ) : $related_products -> the_post(); ?>

                <a href="<?php the_permalink(); ?>" class="related-product">
                    <?php if( has_post_thumbnail() ) : ?>
                        <?php the_post_thumbnail( 'full', array( 'class' => 'related-product-img', 'alt' => get_the_title() ) ); ?>
                    <?php endif; ?>
                </a>

            <?php endwhile; wp_reset_query(); ?>

        </div>
        <?php
    }
}

Вызов из любого места с помощью

display_related_products('название-тега');
5 авг. 2016 г. 00:20:54