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