2012-03-13 4 views
0

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

<?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 
?> 

ответ

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' 
    ) 
) 
); 

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

+0

Блестящий, который работает до некоторой степени, но то, что он по существу делает, более или менее разбирает все. Я пытаюсь сделать это, чтобы игнорировать те теги, но обратите внимание на другие теги в сообщениях, которые помечены этим. Я не уверен, действительно ли это возможно, хотя, если честно, так как очевидно, что он не показывает сообщения с этим тегом, когда я имею в виду больше, не показываю сообщения, если у них есть только этот тег, общий с вами. Имеет ли это смысл? – Amy

+0

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

+0

Проверьте обновленный ответ. Я думаю, это может быть то, что вы хотите сделать. – chrisn