Intereting Posts
Как показать изображение Мета под КАЖДОЙ картиной в КАЖДОЙ почте WP_Query – фильтр или напрямую? Динамически создавать пользовательский тип сообщения в зависимости от отношения Другой пользовательский тип сообщения Отображение различных изображений заголовков на основе текущей страницы Сортировать комментарии от karma Плагин, который позволяет посетителям Как сообщение (а не facebook) и магазины нравится в обычном мета? Несколько категорий в Catlist с использованием функции имени Пользовательские электронные письма Woocommerce без заголовка и нижнего колонтитула Переопределение файлов шаблонов плагинов с детской темой Как группировать неиерархические теги? Форма комментария – E-mail не требуется! Предварительный просмотр возвращает 404 в теме Как отключить поле для дополнительных пользовательских полей? Где найти код, который перенаправляет запросы на статический URL страницы на домашнюю страницу Почему мой пользовательский виджет не выводит какой-либо контент?

Сообщение WP_Query в пользовательской позиции

Допустим, у меня есть пользовательский запрос, который основан на двух настраиваемых типах сообщений:

$wp_query = new WP_Query(array( 'post_type' => array('post-type-1', 'post-type-2'), 'post_status' => 'publish', 'posts_per_page' => '3'); 

то, что я хочу, состоит в том, чтобы помещать сообщения из post-type post на третьей позиции в результатах на каждой странице.

Возможно ли это в ОДНОМ запросе с фильтрами или любым другим способом?

Solutions Collecting From Web of "Сообщение WP_Query в пользовательской позиции"

Пагинация должна быть простой. Вам просто нужно добавить параметры разбивки по страницам в ваш запрос и следующие / предыдущие сообщения, более или менее похожие на другой поток, который я опубликовал недавно .

 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $my_query = new WP_Query( array( 'showposts'=>10, 'paged' => $paged ) ); // run the loop then, // pagination links ... var_dump(paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'current' => max( 1, get_query_var('paged') ), 'total' => $my_query->max_num_pages ) )); 

Но … получить соотношение два к одному в каждом результирующем наборе нет.

Я считаю, что я мог бы сделать это с помощью специального SQL-запроса (используя UNION ) и $wpdb->get_results или $wpdb->get_col . Однако разбиение на страницы было бы немного сложнее, и вы не станете объектами сообщения WordPress таким образом, скорее всего, вам понадобится второй запрос для их создания (и вы почти всегда нуждаетесь в них). Минимальный SQL выглядел бы как …

(SELECT ID FROM {$wpdb->posts} WHERE post_type='post-type-1' LIMIT a,b) UNION ALL (SELECT ID FROM {$wpdb->posts} WHERE post_type='post-type-2' LIMIT c,d)

Трудная часть – это получение значений для этих прав.

В принципе, с правильными фильтрами – posts_where, posts_fields и т. Д. – вы должны иметь возможность изменять запрос, соответствующий пользовательскому SQL, упомянутому выше, но опять-таки разбивка на страницы будет немного сложной и фактический запрос, WP_Query использует WP_Query сложнее, поэтому вам придется сопоставить это, когда вы создаете UNION .

При любом из этих решений может потребоваться отсортировать результаты перед их повторением. Я должен был бы настроить запросы, проверить их и посмотреть.

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

Так…

Возможно ли это в ОДНОМ запросе с фильтрами или любым другим способом?

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