Отобразить запрос Wordpress дважды на одной странице, 1 без нумерации страниц, другой с нумерацией страниц - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть сайт WordPress, который отображает карту медицинских провайдеров и список ниже тех же провайдеров.

https://preview.scmamit.yourmark.com/?sfid=756&_sft_provider_type=primary-care

Мне нужно показать все результатыпоиск по карте, но тогда список должен иметь нумерацию страниц (отображать только 25 на страницу). Я бегу по циклу дважды, 1-й, чтобы построить пины для карты, и 2-й, чтобы отобразить список.

Если я отключу нумерацию страниц, чтобы показать все пины на карте, как тогда я буду отображатьсписок с нумерацией страниц под картой?

В те времена, когда я был в Coldfusion, я делал запросы к 2-му циклу, и я видел "pre_get_posts" и некоторые другие параметры, которые кажутся близкими к тому, чтоЯ хочу, но ничто не доставит меня туда.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Думаю, я опубликую, что я сделал, чтобы получить эту работу. Спасибо @ tom-ukelove за то, что меня направили в правильном направлении.

У меня была карта, список и поисковый фильтр на этой странице. Фильтр поиска создается с помощью плагина Search & Filter.

https://scmamit.com/?sfid=756

В моих настройках Search & Filter я установил результаты для каждой страницы равными 25, что мне и требовалось для списка. сделать в цикле № 2.

Чтобы отобразить все результаты на карте (цикл № 1), я использовал следующий код для удаления предела 25 posts_per_page.

<?php
//get the search variables from URL
$this_keyword = $_GET['_sf_s'];
$this_provider_type = $_GET['_sft_provider_type'];
$this_city = $_GET['_sfm_city'];

//rebuild the query
$args = array(
'post_type' => 'providers',
'provider_type' => $this_provider_type,
's' => $this_keyword,
    'meta_query' => array(
        array(
            'key' => 'city',
            'value' => $this_city,
            'compare' => 'LIKE'
        )
    ),
//use -1 to remove the 25 results per page limit
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);

$the_query = new WP_Query( $args ); 
global $wp_query;
// Put 25 limit query object in a temp variable
$tmp_query = $wp_query;
// Now purge the global query
$wp_query = null;
// Re-populate the global with the no-limit custom query
$wp_query = $the_query;
$count = $the_query->post_count;

//run the loop #1 and build map pins within.
while($the_query->have_posts()) : $the_query->the_post();

//echo out map pin code here, or whatever you need in the 1st loop.

endif;
endwhile;

//reset the query
wp_reset_query();

// Restore original 25 limit query object
$wp_query = null;
$wp_query = $tmp_query;
?>

<ul>
<?php
// run the 2nd loop with pagination
while(have_posts()) : the_post();

// some <ul> list here

endwhile;
?>
</ul>

<?php 
//display pagination
$numeric_posts_nav();
?>

Надеюсь, чтопомогает кому-то в будущем. Лмк, если есть более эффективный способ сделать это.

0 голосов
/ 07 ноября 2019

Просто запустите цикл во второй раз:

Сначала сбросьте первый запрос в конце его:

wp_reset_query();

И добавьте это во второй запрос:

$count = get_option('posts_per_page', 10);
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$offset = ($paged - 1) * $count;

И добавьте следующие аргументы в запрос:

'posts_per_page' => $count,
'paged' => $paged,
'offset' => $offset,

С уважением, Том

...