- Редактировать 1 -
Узнал кое-что новое. Я добавляю их сверху, поскольку они могут быть более релевантными, чем приведенный ниже код.
Я перезапускал сценарии несколько раз. Я теперь получаю разные выводы на самом деле.
Выполнение var_dump($wp_query->query);
сразу после $the_query = new WP_Query($queryArgs);
При первом рендеринге цикла записи мне выдаются варианты запроса на странице, на которой отображается цикл. Вызывая его с помощью ajax, он перезапускает ту же часть кода, верно? Так чем он возвращается пустым.
Мои мысли:
- Pages вызывается, запускает funtions.php.
- Запускает часть
wp_enqueue_script('rtt_scripts');
- В этот момент он получает текущие значения
$wp_query
. Какие значения страницы.
- Чем рендерит страницу с пост-циклом.
- В этот момент запускается цикл постов
$the_query = new WP_Query($queryArgs);
- При нажатии загрузки больше ajax, чем вызывает его, чтобы запустить цикл post. С переменными запроса, установленными с
wp_enqueue_script('rtt_scripts');
Это заставило меня задуматься. Я запускаю код в неправильном порядке? Не заданы ли переменные запроса для ajax? Другие мысли. Должен ли я сосредоточиться на том, как получить переменные запроса в первом пост-цикле в переменные запроса ajax?
- Конец редактирования -
У меня проблемы с кнопкой «загрузить больше» в Wordpress. Код ниже - это основной код, который у меня есть сейчас.
Насколько я вижу, это должен быть рабочий код :) Проблема, однако, в том, что это не работает.
Моя проблема в том, что я не знаю, с чего начать отладку. Самое близкое, что я знаю, где проблема заключается в следующем:
В rtt_loadmore_ajax_handler()
есть переменная $queryArg
Когда var_dumping var $queryArg
в обоих rtt_post_grid()
и rtt_loadmore_ajax_handler()
Это дает разные результаты. Здесь я бы ожидал таких же результатов. В вызове Ajax он возвращает аргументы
текущей отображаемой страницы, а не запроса на этой странице.
Будет ли global $wp_query;
проблемой? И как мне идти отсюда?
Основной почтовый индекс:
function rtt_post_grid()
{
$queryArgs = Array(
"post_type" => Array(
'news',
'agenda'
),
'posts_per_page' => 4,
'post_status' => 'publish',
'paged' => 1
);
// post grid wrap
echo '<div id="rtt_posts_wrap" >';
rtt_post_grid_query($queryArgs);
echo '</div>';
// load more button
echo '<form>';
echo '<button id="rtt_loadmore" class=" button">Load more post</button> ';
echo '<input type="hidden" name="action" value="loadmore" />'; // this line might be obsolete
echo '</form>';
}
function rtt_post_grid_query($queryArgs)
{
// The Query
$the_query = new WP_Query($queryArgs);
// The Loop
if ($the_query->have_posts()) {
echo '<ul>';
while ($the_query->have_posts()) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
/* Restore original Post Data */
wp_reset_postdata();
} else {
// no posts found
echo 'no posts found';
}
}
Настройка JS:
if(!has_action('rtt_post_grid_script_and_styles')) {
add_action('wp_enqueue_scripts', 'rtt_post_grid_script_and_styles', 1);
function rtt_post_grid_script_and_styles()
{
global $wp_query;
wp_register_script('rtt_scripts', plugin_dir_url( __FILE__ ) . 'js/script.js', array('jquery'), time());
wp_enqueue_script('rtt_scripts');
wp_localize_script('rtt_scripts', 'rtt_loadmore_params', array(
'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php', // WordPress AJAX
'posts' => json_encode($wp_query->query_vars), // everything about your loop is here
'current_page' => $wp_query->query_vars['paged'] ? $wp_query->query_vars['paged'] : 1,
'max_page' => $wp_query->max_num_pages
));
wp_enqueue_script('rtt_scripts');
}
}
JS / Ajax:
jQuery(function($){
$(window).ready(function() {
$('#rtt_loadmore').click(function () {
$.ajax({
url: rtt_loadmore_params.ajaxurl,
data: {
'action': 'loadmore', // the parameter for admin-ajax.php
'query': rtt_loadmore_params.posts, // loop parameters passed by wp_localize_script()
'page': rtt_loadmore_params.current_page, // current page
},
dataType: 'json',
type: 'POST',
beforeSend: function (xhr) {
$('#rtt_loadmore').text('Bezig met laden...'); // some type of preloader
},
success: function (data) {
if (data) {
$('#rtt_loadmore').text('More posts');
$('#rtt_posts_wrap').append(data.content); // insert new posts
rtt_loadmore_params.current_page++;
if (rtt_loadmore_params.current_page == rtt_loadmore_params.max_page){
$('#rtt_loadmore').hide(); // if last page, HIDE the button
}
} else {
$('#rtt_loadmore').hide(); // if no data, HIDE the button as well
}
}
});
return false;
});
});
});
Обработчик Ajax:
add_action('wp_ajax_loadmore', 'rtt_loadmore_ajax_handler'); // wp_ajax_{action}
add_action('wp_ajax_nopriv_loadmore', 'rtt_loadmore_ajax_handler'); // wp_ajax_nopriv_{action}
function rtt_loadmore_ajax_handler(){
$postData = $_POST;
// prepare our arguments for the query
$queryArgs = json_decode( stripslashes( $postData['query'] ), true );
$queryArgs['paged'] = $postData['page'] + 1; // we need next page to be loaded
$queryArgs['post_status'] = 'publish';
ob_start();
rtt_post_grid_query($queryArgs);
$output = ob_get_contents();
ob_end_clean();
global $the_query;
echo json_encode( array(
'posts' => serialize( $the_query->query_vars ),
'max_page' => $the_query->max_num_pages,
'found_posts' => $the_query->found_posts,
'content' => $output
) );
die;
}