Связанные сообщения цикл WordPress, исключая определенные теги

Есть ли способ исключить определенные теги из цикла связанных сообщений, в то время как он все еще находит другие теги? Вот код, который у меня есть, но я знаю, что нет такого значения, как tag_slug__not_in, но я не хочу использовать идентификаторы, потому что они беспорядочны, нет ли способа исключить теги через слаг, и вообще будет ли это работать, потому что я Я говорю, что все теги включены? Любая помощь очень ценится!

<?php  //for use in the loop, list 5 post titles related to first tag on current post
$backup = $post;  // backup the current object
$tags = wp_get_post_tags($post->ID);
$tagIDs = array();
if ($tags) {
$tagcount = count($tags);
for ($i = 0; $i < $tagcount; $i++) {
  $tagIDs[$i] = $tags[$i]->term_id;
}
$args=array(
  'tag__in' => $tagIDs,
  'tag_slug__not_in' => array('investing', 'investment', 'travel', 'shopping', 'retail',       'organisations', 'governments', 'government', 'individuals', 'entrepeneurs', 'companies', 'markets', 'finance', 'clean-tech', 'money', 'world', 'business'),
  'post__not_in' => array($post->ID),
  'showposts'=>5,
  'caller_get_posts'=>1,
  'post_type' => array('post','indepth','feature','interview')
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { ?>
<h3>Related Articles</h3>
<?php  while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <ul><li><p><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></p></li>
    </ul>
  <?php endwhile;
} else { ?>

<?php }
}
$post = $backup;  // copy it back
wp_reset_query(); // to use the original query again
?>

person Amy    schedule 13.03.2012    source источник


Ответы (1)


Я согласен, довольно глупо, что у них нет параметра tag_slug__not_in.

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

$args=array(
  'post__not_in' => array($post->ID),
  'showposts'=>5,
  'caller_get_posts'=>1,
  'post_type' => array('post','indepth','feature','interview'),
  'tax_query' => array(
    'relation' => 'OR',
    array(
        'taxonomy' => 'post_tag',
        'field' => 'id',
        'terms' => $tagIDs
    ),

    array(
        'taxonomy' => 'post_tag',
        'field' => 'slug',
        'terms' => array('investing', 'investment', 'travel', 'shopping', 'retail', 'organisations', 'governments', 'government', 'individuals', 'entrepeneurs', 'companies', 'markets', 'finance', 'clean-tech', 'money', 'world', 'business'),
        'operator' => 'NOT IN'
    )
  )
);

Если это не сработает, попробуйте прочитать больше о параметрах таксономии в WP_Query и посмотреть, может ли добавление ключа relation в массив tax_query еще больше помочь в решении вашей проблемы.

person chrisn    schedule 13.03.2012
comment
Великолепно, это работает до некоторой степени, но по сути это более или менее разъединяет все... что я пытаюсь сделать, так это заставить его игнорировать эти теги, но обращать внимание на другие теги в сообщениях, которые помечены тот. Я не уверен, что это на самом деле возможно, хотя, если честно, очевидно, что он говорит не отображать сообщения с этим тегом, когда я имею в виду больше, не отображать сообщения, если они имеют только этот тег общий с вами. Имеет ли это смысл? - person Amy; 14.03.2012
comment
Я в основном хочу, чтобы он игнорировал эти теги, но не сообщения, чтобы он все еще искал другие связанные теги в этих сообщениях. Хитрый один. Ммм, я не уверен, что это возможно сейчас, я думаю об этом. - person Amy; 14.03.2012
comment
Проверьте мой обновленный ответ. Я думаю, это может быть то, что вы хотите сделать. - person chrisn; 14.03.2012
comment
Я думаю, что из-за этого NOT IN не работает, поскольку он просто снова относится ко всем тегам, мм, это сложно :( - person Amy; 14.03.2012
comment
Можете изменить свой пост и привести пример того, что вы ожидаете, учитывая определенные посты и теги? - person chrisn; 15.03.2012