В общем решил вопрос +/- вроде даже понял почему не работало, но
то только теория :D
Фишка в том, что я решил аргументы для WP_Query передать через ajax запрос, и сразу все нормально заработало, приведу свой код ниже:
код в functions.php
function the_keys_loadmore() {
$paged = ! empty( $_POST[ 'paged' ] ) ? $_POST[ 'paged' ] : 1;
$post_type = '';
$paged++;
$args = array(
json_decode( stripslashes( $_POST['query_vars'] ), true ),
);
foreach ($_POST['args'] as $key => $value) {
if ($key === "paged") {
$args[$key] = $paged;
} else if ($key === "post_per_page") {
$args[$key] = "1000";
} else if ($key === "post_type") {
$args[$key] = $value;
$post_type = $value;
} else {
$args[$key] = $value;
}
}
$posts = new WP_Query( $args );
if( ! $posts->have_posts() ) {
get_template_part( 'content', 'none' );
}
else {
while ( $posts->have_posts() ) {
$posts->the_post();
get_template_part( 'template-parts/content', $post_type);
}
}
die;
}
Пару комментариев в переменной 'args', которую мы получили через $_POST, как раз лежат аргументы для WP_Query, через цикл записываю все занчения в свою переменную $args, которую потом передаю в WP_Query.
PHP код в шаблоне:
global $wp_query;
$args = array(
'post_type' => 'team',
'orderby' => 'team_order',
'meta_query' => array(
array(
'key' => 'team_order',
'value' => array(1, 1000),
'type' => 'numeric',
'compare' => 'BETWEEN'
)
),
'order' => 'ASC',
'post_status' => 'publish',
'posts_per_page' => 6,
'paged' => 1
);
$argsJson = json_encode($args);
$team = new WP_Query($args);
<?php if ($team->have_posts()) : ?>
<div class="team__list">
<?php while ($team->have_posts()) : $team->the_post();
get_template_part('template-parts/content', 'team');
endwhile; ?>
</div>
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$max_pages = $team->max_num_pages;
if ($paged < $max_pages) : ?>
<button
class="btn team__btn-more"
data-max_pages="<?= $max_pages ?>"
data-paged="<?= $paged ?>"
data-args='<?= $argsJson ?>'
>
Показать еще
</button>
<?php endif; ?>
<?php else: ?>
Здесь пока пусто
<?php endif; ?>
Пару комментариев. Создал переменную $argsJson и передал в нее переменную $args, конвертнув при этом все в JSON. и передал переменную $argsJson в дата параметр на кнопке (важное примечание, если в дата параметр передавать JSON, то обязательно нужно оборачивать в одинарные кавычки, иначе JS не считает, что в этом жата параметре).
И, наконец, JS код
var button = $('.team__btn-more'),
maxPages = button.data('max_pages'),
args = button.data('args');
button.on('click', function (e) {
e.preventDefault();
var parentList = $('.team__list'),
paged = $(this).data('paged');
var myData = {
paged: paged, // номер текущей страниц
action: 'loadmore', // экшен для wp_ajax_ и wp_ajax_nopriv_
args: args,
query_vars: the_keys.query_vars,
}
$.ajax({
url: the_keys.ajaxurl,
type: 'post',
data: myData,
beforeSend: function (xhr) {
button.text('Загружаем...');
button.addClass('disabled');
},
success: function (result) {
// console.log(result);
parentList[0].insertAdjacentHTML('beforeend', result);
paged++;
if( paged === maxPages ) {
button.remove();
} else {
button.text( 'Показать ещё' );
button.data('paged', paged);
button.removeClass('disabled');
}
}
})
});
Тут в целом нечего комментировать :)
Надеюсь, что кому-то помогу этим решением :)