Intereting Posts
Как показать только сообщение стандартного формата в моей пользовательской странице таксономии-wordpress 3.8.1 Вставить кнопку Facebook в заголовок Загрузка файла приводит к сообщению вложений, но файл отсутствует Является ли это правильным способом переключения ссылки «Изменить мой профиль» на мою ссылку «Расширенный профиль» BuddyPress? Правильный способ передачи учетных данных в пользовательской форме входа, чтобы избежать «уже отправленных заголовков», Отображение категории WooCommerce на пользовательской странице По умолчанию фильтр по категориям сбрасывает ошибку базы данных Почему мой плагин требует перезагрузки постоянной ссылки после новой установки? Получайте зарегистрированные пользовательские поля или отправляйте мета, даже если они пусты WordPress построен в меню панировочных сухарей? Добавление переменного продукта в WooCommerce программно Сортировка определенной таксономии по дате архива с использованием URL-адреса Сохранение условий для детей на лицевой стороне без установки родительского Как добавить бесконечный свиток? Почему ограничение загрузки файлов WordPress настолько низкое? Меняет ли это вред?

Ajax загружает дубликат сообщения

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

У меня возникла проблема с тем, что файл loop.php загружает одну и ту же запись несколько раз, и я попытался предотвратить дублирование метода post и ничего не работаю. Как вы можете видеть ниже, я загружаю функцию для публикации в функцию ajax, и я получаю звонок успеха, но на данный момент я не уверен, что проблема с файлом цикла. Когда сайт 1st загружает, он загружает 1-й набор сообщений, а затем, когда он получает второй набор сообщений, это нормально, но все, что после этого, все равно, его содержимое, как и файл цикла, загружается, но запрос застрял или что-то в этом роде.

Какие-либо предложения? Любая помощь приветствуется.

Файл loop.php

<div class="post-left"> <?php query_posts(array('post__not_in' => $id_merge,'posts_per_page'=>'2')); $do_not_duplicate = $post->ID; if (have_posts()) : while (have_posts()) : the_post(); if( $post->ID == $do_not_duplicate ) continue; $ids[] = get_the_ID(); ?> <div class="images-grid-page-wrapper"> <?php the_title(); ?> </div> <?php endwhile; endif; // End the loop. Whew. ?> </div> <div class="post-mid"> <?php query_posts(array('post__not_in' => $id_merge,'posts_per_page'=>'3')); $do_not_duplicate = $post->ID; if (have_posts()) : while (have_posts()) : the_post(); if( $post->ID == $do_not_duplicate ) continue; $ids[] = get_the_ID(); ?> <div class="images-grid-page-wrapper"> <?php the_title(); ?> </div> <?php endwhile; endif; // End the loop. Whew. ?> </div> 

functions.php

 add_action('wp_ajax_infinite_scroll', 'wp_infinitepaginate'); // for logged in user add_action('wp_ajax_nopriv_infinite_scroll', 'wp_infinitepaginate'); // if user not logged in function wp_infinitepaginate(){ $loopFile = $_POST['loop_file']; get_template_part( $loopFile ); exit; } 

Аякса

 jQuery(document).ready(function($) { var count = 1; var total = <?php echo $wp_query->max_num_pages; ?>; $(window).scroll(function(){ if ($(window).scrollTop() == $(document).height() - $(window).height()){ if (count > total){ return false; }else{ loadArticle(count); } count++; } }); function loadArticle(){ $('a#inifiniteLoader').show('fast'); $.ajax({ url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", type:'POST', data: "action=infinite_scroll&loop_file=loop", success: function(html){ $('a#inifiniteLoader').hide('1000'); $("#content").append(html); // This will be the div where our content will be loaded } }); return false; } }); 

Solutions Collecting From Web of "Ajax загружает дубликат сообщения"

У вас есть несколько вещей, чтобы рассмотреть здесь.

Давайте начнем работу браузера.

Вы создаете HTML, настолько хороший, что он содержит структуру и все для вашего сайта. Нет статей.

Следующим шагом, который должен сделать ваш браузер, является вызов AJAX.

Вот первые вещи, которые нужно учитывать. В вашей функции document.ready вы не отправляете смещение сообщений в вашу функцию AJAX-php. Насколько я могу судить по вашему коду, вы всегда хотите показать 5 сообщений при вызове функции.

Поэтому рассмотрим следующее:

Сначала счет равен 0. При каждом успешном обновлении счет увеличивается на 5. Вы должны поместить эту часть в успешную часть вашего вызова AJAX. Кроме того, ваша функция AJAX-php должна знать смещение постов, которые должны быть доставлены.

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

Ваш Javascript должен выглядеть следующим образом:

 jQuery(document).ready(function($) { var count = 0; var total = <?php echo $wp_query->max_num_pages; ?>; $(window).scroll(function(){ if ($(window).scrollTop() == $(document).height() - $(window).height()){ if (count > total){ return false; }else{ loadArticle(count); } } }); function loadArticle(count){ $('a#inifiniteLoader').show('fast'); // I prefer doing the ajaxdata with an array var ajaxdata = { 'action' : 'infinite_scroll' 'offset' : count } $.ajax({ url: "<?php bloginfo('wpurl') ?>/wp-admin/admin-ajax.php", type:'POST', data: ajaxdata, success: function(html){ $('a#inifiniteLoader').hide('1000'); $("#content").append(html); // This will be the div where our content will be loaded count = count + 5; // Increase the number of posts that are already shown. } }); return false; } }); 

Как вы можете видеть, я создал массив для ajaxdata – проще взглянуть на него таким образом. Я также удалил loopfile=loop , как вы можете видеть позже, потому что я бы сделал ответ по-другому.

До сих пор так хорошо – теперь нам стоит подумать о том, чтобы создать ответ AJAX немного иначе. Вы зарегистрировали его правильно, но я бы обработал его не с помощью get_template_part , get_template_part другую функцию, передав переменные.

Регистрация функции AJAX будет такой:

 add_action('wp_ajax_infinite_scroll', 'wp_infinitepaginate'); // for logged in user add_action('wp_ajax_nopriv_infinite_scroll', 'wp_infinitepaginate'); // if user not logged in function wp_infinitepaginate(){ load_ajax_results($_POST['count']); exit; } 

Последний шаг – это фактическая функция для объединения вашего вывода. Вы можете разместить это в любом месте, в файле functions.php или другом файле. Я предпочитаю создать файл ajax-functions.php который включен в мои functions.php , содержащий все вышеперечисленные функции (за исключением Javascript, конечно)

 <?php function load_ajax_results( $offset ) { // I use the $_POST['count'] as $offset here ?> <div class="post-left"> <?php $args = array( 'numberposts' => '2', // 2 Posts to show here 'offset' => $offset // the number of Posts to skip, given by the AJAX call ); query_posts( $args ); // nothing else should be needed if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="images-grid-page-wrapper"> <?php the_title(); ?> </div> <?php endwhile; endif; // End the loop. Whew. ?> <?php wp_reset_query(); // reset it ?> </div> <div class="post-mid"> <?php $offset = $offset + 2; // because we had 2 Posts before $args = array( 'numberposts' => '3', // 3 Posts to show here 'offset' => $offset // the number of Posts to skip, given by the AJAX call ); query_posts( $args ); // nothing else should be needed if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="images-grid-page-wrapper"> <?php the_title(); ?> </div> <?php endwhile; endif; // End the loop. Whew. ?> </div> <?php } ?> 

Поскольку я использую здесь смещение, мне не нужно проверять, было ли ранее указано какое-либо из сообщений.

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

Не тестировал это при моей установке, но я надеюсь, что вы поймете эту идею. Если есть какие-либо ошибки, извините, и если есть какие-либо вопросы, прокомментируйте пожалуйста 🙂