2014-01-10 4 views
0

У меня есть шаблон, в котором есть основной последний признанный пост (помеченный как признанный), а затем еще 8 ниже. На домашней странице я смог запросить последнюю полезную запись, а затем передать ее идентификатор функции в фильтр wordpress pre_get_posts. он прекрасно работает тамКак исключить сообщение по id из запроса category.php в wordpress

function mh_exclude_featured_query($query) { 
    if(is_home()){ 
     if ($query->is_home()) { 
      $feat = get_featured_post(); 
      $query->query_vars['post__not_in'] = array($feat->ID); 
     } 
    } 
} 
add_action('pre_get_posts', 'mh_exclude_featured_query'); 

, но я также пытаюсь сделать то же самое в category.php, где я бы показать последнюю запись помечена как сказано в этой категории. а затем оставшиеся сообщения ниже с отмеченной позицией исключены.

К сожалению, когда я пытаюсь использовать тот же метод, что и выше, используя фильтр pre_get_posts, я застреваю в бесконечном цикле и исчерпал память.

if($query->is_category() && $query->is_main_query()){ 
    $cur_cat_id = get_cat_id(single_cat_title("",false)); 
    $feat = get_featured_post($cur_cat_id); 
    $query->query_vars['post__not_in'] = array($feat->ID); 
} 

не уверен, что я делаю по-другому, что приводит к истощению памяти. category.php и index.php почти идентичны по своей структуре.

ответ

1

использовать pre_get_posts фильтр:

<?php 

function excludePostId($query) { 
    $postIds = array(
    24, 10 
); 

    if (is_category() && is_main_query()) { 
    set_query_var('post__not_in', $postIds); 
    } 
} 
add_action('pre_get_posts', 'excludePostId'); 

is_category() примет категорию слизняка или ID. Вы можете ограничить, из каких категорий будет исключен пост.

+0

Спасибо. Я заставил его спорить. –

1

Добавьте этот код

<?php if(!is_category('category_id')){ 
    echo 'Your Code Here'; 
    }?> 
Смежные вопросы