Vagrant0610
@Vagrant0610
PHP разработчик

Как новый тип записи в WordPress вывести при поиске?

Здравствуйте!
Создал новый тип записи в WordPress следующим образом:
Код
public function register_type_post_init()
    {
        $labels = array(
            'name' => 'Оплаченные подписки',
            'singular_name' => 'Оплаченная подписка', // Добавить->Функцию
            'add_new' => 'Создать заказ',
            'add_new_item' => 'Создать новый заказ', // Заголовок тега <title>
            'edit' => 'Редактировать',
            'edit_item' => 'Редактировать заказ',
            'new_item' => 'Новый заказ',
            'all_items' => 'Все заказы',
            'view_item' => 'Просмотр заказов',
            'search_items' => 'Искать заказ',
            'not_found' =>  'Заказ не найдены.',
            'not_found_in_trash' => 'В корзине заказов не найдено.',
            'menu_name' => 'Оплаченные подписки', // Наименование пункта меню в админ-панели
            'filter_items_list' => 'Фильтр заказов',
            'items_list_navigation' => 'Навигация по заказам',
            'items_list' => 'Список заказов'
        );
        $args = array(
            'labels' => $labels,
            'description' => 'Это оплаченные заказы платной подписки.',
            'public' => false,
            'show_ui' => true, // Показать в панели администратора
            'map_meta_cap' => true,
            'publicly_queryable' => false,
            'exclude_from_search' => false,
            'rewrite' => true,
            'query_var' => false,
            'has_archive' => false,
            'menu_icon' => 'dashicons-list-view', // Иконка в меню
            'menu_position' => 9, // Порядок в меню
            'permalink_epmask' => EP_NONE, // Отключаем URL адрес
            'register_meta_box_cb' => 'subscribes_orders::add_order_meta_box',
            'supports' => array('title'), // Размещаем поля "Заголовок", "Описание", "Произвольные поля"
        );
        register_post_type('subs-orders', $args);
    }

При поиске в панели администратора на странице нового типа записи, выводятся почему-то все материалы которые есть на сайте а не тип записи который я создал. Хотя в адресной строке он указан.
Так выглядит страница созданной записи:
5bc0152db8863729021448.jpeg
Когда я делаю поиск на этой странице, выдаётся результат с постами которые не относятся к типу записи на странице которого я нахожусь. В общем необходимо что бы поиск искал только среди заказов.
5bc0160446822721398916.jpeg
В чем могут причины такого поведения, подскажите пожалуйста. Буду очень благодарен.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Vagrant0610
@Vagrant0610 Автор вопроса
PHP разработчик
Проблема решена! Большое спасибо Василий Пупкин за его ответ в комментариях к вопросу. Направил в нужную сторону. Теперь подробнее о том с чем была связана проблема. В моём случае, в файле functions.php использовался фильтр (так же, есть хук) 'pre_get_posts'. Он срабатывает перед каждым обращением в базу данных с использование класса WP_Query. И изменял тип поста среди которых происходил поиск.
Код в котором и была проблема
function excludePages($query)
{
	if($query->is_search)
	{
		$query->set('post_type', 'post');
	}
	return $query;
}
add_filter('pre_get_posts','excludePages');

Решение довольно простое. Необходимо установить проверку на нахождение в админ панели.
Исправленный код
function excludePages($query)
{
	if($query->is_search) // Если запрос в БД отправляется в результате поиска по сайту
	{
		if(!is_admin()) $query->set('post_type', 'post'); // Если пользователь не находится в панели администратора
	}
	return $query;
}
add_filter('pre_get_posts','excludePages');

Возможно кому-то поможет мой ответ в будущем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы