Использование out_tag () внешнего цикла

Я хочу, если в чеке следующего сообщения есть определенный тег. Я попробовал следующий код, но он не работает, потому что has_tag() работает только в цикле. Я хочу использовать его вне цикла.

 <?php if ( has_tag( 'mario', $post->ID ) ) : ?> my content <?php endif; ?> 

В следующем коде перечислены теги из сообщения, но я не знаю, как заставить его работать с условием if() / else() :

 global $post; foreach ( get_the_tags( $post->ID ) as $tag ) { echo $tag->name . ', '; } 

Solutions Collecting From Web of "Использование out_tag () внешнего цикла"

has_tag() не обязательно должно использоваться внутри Loop; его можно передать объекту $post в качестве второго параметра:

 has_tag( $tag, $post ); 

Поскольку has_tag() умолчанию соответствует текущему сообщению, вам просто нужно передать ему объект для следующего смежного сообщения. К счастью, WordPress предоставляет функцию для получения смежных сообщений: get_adjacent_post() :

 get_adjacent_post( $in_same_cat, $excluded_categories, $previous ); 

Параметр $in_same_cat умолчанию $in_same_cat false , параметр $excluded_categories умолчанию $in_same_cat '' , а параметр $previous умолчанию – true . Итак, нам просто нужно изменить этот третий параметр на false , чтобы получить следующую запись, а не предыдущую запись:

 get_adjacent_post( false, '', true ); 

Объединяя его с вашим has_tag() условным:

 if ( has_tag( 'mario', get_adjacent_post( false, '', true ) ) { // Next post has the 'mario' post tag; // do something } 

Вы должны иметь возможность использовать что-то вроде этого:

 $post_id = 123; $posttags = get_the_tags($post_id); if (!is_wp_error($posttags) && $posttags) { foreach($posttags as $tag) { if ($tag->name == 'mario') { echo 'yup'; } } } 

Что вы делаете:

  • Захват тегов
  • Если есть какие-либо теги, запускающие каждый из них через foreach
  • Если один из этих экземпляров foreach соответствует случаю mario , что-то делает (в этом случае, эхом «yup»)

Дайте мне знать, если это поможет.