2015-01-04 2 views
0

У меня есть сайт WordPress, основанный на теме 320 WP-Bootstrap, с настраиваемым типом сообщения типа. Я использую pre_get_posts(), чтобы включить пользовательский тип сообщения в основной цикл, который работает отлично.pre_get_posts() останавливает работу страниц в WordPress

При использовании нижеуказанной функции ссылки на страницы перестают работать, перенаправляются на страницу 404.

add_action('pre_get_posts', 'add_my_post_types_to_query'); 

function add_my_post_types_to_query($query) { 
    if ((!is_admin()) && $query->is_main_query()) 
     $query->set('post_type', array('post', 'video')); 
    return $query; 
} 

Я выделил все изменения, внесенные в файл функций. Без этого запроса ссылки на страницы работают нормально.

Любая помощь очень ценится.

ответ

1

Вы проверяете, что вы не на странице администратора, и действуете на основном запросе, который замечательный. Часть, которую вам не хватает, проверяет, что вы находитесь в архиве.

На данный момент, независимо от того, что изначальный запрос, вы говорите, чтобы установить тип сообщения для публикации и видео. При посещении страницы запроса изменяется со страницы на сообщение + видео, которое приводит к 404.

Попробуйте следующее:

function add_my_post_types_to_query($query) { 
    if (! is_admin() && $query->is_main_query()) { 

     // Check we're on an archive page. 
     if ($query->is_archive) { 
      $query->set('post_type', array('post', 'video')); 
     } 

    } 

    return $query; 
} 
add_action('pre_get_posts', 'add_my_post_types_to_query'); 
+0

Это решает проблему у меня был, но удален CPT с домашней страницы. Тестирование для is_home() в дополнение к is_archive() разрешено. Спасибо за вашу помощь. – tonyedwardspz

+0

Кстати, «return $ query» бесполезен, так как это действие, а не фильтр, поэтому вы можете просто удалить его или заменить его простым «возвратом». Изменения объекта запроса применяются по ссылке на исходный объект. – lud1977

Смежные вопросы