Wordpress: пытаюсь получить посты по тегу

Я написал код, который автоматически создает сообщения и добавляет к ним тег. Я вижу теги в админ-панели "Все сообщения" и могу щелкнуть ссылку "Теги" сообщений, чтобы получить только те сообщения с тегами.

Однако в плагине, который я пишу с использованием $wp_query, независимо от того, какие параметры я передаю, я просто получаю полный список сообщений, независимо от того, есть ли у них тег, который я ищу, или нет.

Вот мой код:

// Now retrieve all items matching this brand name . . .
$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name))));

// The Loop
while ( $query->have_posts() ) : $query->the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

// Reset Post Data
wp_reset_postdata();

Это дает 10 результатов, когда я сказал только вернуть 5. В действительности я должен получить только 2 сообщения, так как это общее количество с тегом.

Оглядываясь в Интернете, кажется, что многие люди имеют ту же проблему, но не имеют решений. Должно быть, я попробовал около 10 различных способов определения тега, но тот факт, что количество возвращенных сообщений неверно, говорит о том, что я либо что-то совершенно не так, либо есть какая-то ошибка. Версия Wordpress 3.4.1, если это помогает.

Может ли кто-нибудь из Wordpress Pro пролить свет на это?

Заранее спасибо!

4 ответа

Решение

Попробуй это

$original_query = $wp_query;
$wp_query = null;
$args=array('posts_per_page'=>5, 'tag' => $brand_name);
$wp_query = new WP_Query( $args );
if ( have_posts() ) :
    while (have_posts()) : the_post();
        echo '<li>';
        the_title();
        echo '</li>';
    endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();

Ответ был найден здесь - https://codex.wordpress.org/Template_Tags/get_posts

В следующем примере отображаются сообщения, отмеченные тегом "джаз" в разделе "Таксономия жанра" с использованием "tax_query".

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'genre',
            'field' => 'slug',
            'terms' => 'jazz'
        )
    )
);
$postslist = get_posts( $args );

Так что для вас это будет

$args = array( 
        'posts_per_page' => 5,
        'tax_query'      => array(
            array(
                'taxonomy'  => 'post_tag',
                'field'     => 'slug',
                'terms'     => sanitize_title( $brand_name )
            )
        )
    );

$postslist = get_posts( $args );

В своем коде попробуйте:

$query=new WP_Query(array('posts_per_page=5', 'tag' => $brand_name));

вместо:

$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name))));

Для получения дополнительной информации см. https://codex.wordpress.org/Class_Reference/WP_Query(и как упоминалось в недавнем повторяющемся сообщении).

Примечание. $ Brand_name может быть массивом строк или значений, разделенных запятыми и т. Д., И приведенный выше код должен работать.

Или попробуйте:

$myPosts = get_posts(array('tag' => $brand_name));

Смотрите https://codex.wordpress.org/Template_Tags/get_posts

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

      $post = get_post(); // if you don't have $post->ID already
$tag_ids = wp_get_post_tags( $post->ID, array( "fields" => "ids" ) ); // current tags
$args = array(
    "numberposts" => 3,
    "orderby" => "rand",
    "post__not_in" => array( $post->ID ), //exclude current
    "tax_query" => array(
        array(
            "taxonomy" => "post_tag",
            "field"    => "term_id",
            "terms"    => $tag_ids
        )
    )
);
$posts = get_posts( $args ); // getting posts
Другие вопросы по тегам