Автоматически извлекать новые сообщения и добавлять к текущей странице.

У меня есть страница, которая в настоящее время загружает сообщения пользовательского типа сообщений, используя обычный WP_Query. Тип персонализированного сообщения предназначен для новостных статей. Новые статьи новостей (сообщения) постоянно записываются, поэтому необходимо загружать новые сообщения, не обновляя страницу.

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

Любые фрагменты кода или идеи о том, как это сделать?

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

Solutions Collecting From Web of "Автоматически извлекать новые сообщения и добавлять к текущей странице."

Я был в той же ситуации, что и вы недавно. То, как я это делал, вероятно, неверно, и подвержено ошибкам, но если вы можете жить с этим, это может помочь.

В основном вы создаете пустой массив в верхней части вашего файла цикла, например, например, loop-index.php.

$ ignores = array ();

Затем внутри цикла post вы хотите добавить эти идентификаторы сообщений в массив (внутри цикла while).

$ ignores [] = $ post-> ID;

Тогда у вас, очевидно, будет ссылка, которую можно нажать, чтобы показать больше сообщений с событием клика Javascript, связанным тоже, предположительно с помощью jQuery. В ссылке установите тег rel, который будет массивом идентификаторов, вам нужно будет сделать foreach над массивом и разделить их запятой.

Затем в шаблоне цикла, который ищет переменную GET, передаваемую из URL-адреса AJAX, и используйте post__not_in для вашего WP_Query, чтобы он не загружался в эти идентификаторы уже загруженных сообщений.

Если вам нужен пример кода, я был бы рад написать вам пример.

Я был в той же ситуации, что и вы недавно. То, как я это делал, вероятно, неверно, и подвержено ошибкам, но если вы можете жить с этим, это может помочь.

В основном вы создаете пустой массив в верхней части вашего файла цикла, например, например, loop-index.php.

$ ignores = array ();

Затем внутри цикла post вы хотите добавить эти идентификаторы сообщений в массив (внутри цикла while).

$ ignores [] = $ post-> ID;

Тогда у вас, очевидно, будет ссылка, которую можно нажать, чтобы показать больше сообщений с событием клика Javascript, связанным тоже, предположительно с помощью jQuery. В ссылке установите тег rel, который будет массивом идентификаторов, вам нужно будет сделать foreach над массивом и разделить их запятой.

Затем в шаблоне цикла, который ищет переменную GET, передаваемую из URL-адреса AJAX, и используйте post__not_in для вашего WP_Query, чтобы он не загружался в эти идентификаторы уже загруженных сообщений.

Если вам нужен пример кода, я был бы рад написать вам пример.

** Обновление с кодом примера **

<div id="posts"> <?php $numposts = wp_count_posts('post'); $numposts = $numposts->publish; // Posts per page $per_page = 9; // Determine total amount of pages $total_pages = ceil($numposts / $per_page); // Get current page $paged = (get_query_var( 'page' )) ? get_query_var( 'page' ) : 1; // Above your loop $ignores = array(); // If we have sent ignore ID's if ( $_GET['ignore'] ) { $get_ignores = trim($_GET['ignore'], ','); $get_ignores = explode(',', $get_ignores); } // If we have ignore ID's if ( !empty($get_ignores) ) { foreach ($get_ignores AS $k => $v) { $ignores[] = $v; } } $count = 1; $my_args = array( 'posts_per_page' => 9, 'paged' => get_query_var( 'page' ), 'post__not_in' => $ignores, 'post_status' => 'publish' ); $my_query = new WP_Query($my_args); if ( $paged <= $total_pages): $paged = $paged + 1; // The loop while ( $my_query->have_posts() ): $my_query->the_post(); // At the start of the loop populate the used post ID's $ignores[] = $post->ID; ?> <div class="post"> <h2><?php the_title(); ?></h2> </div> <?php $count++; endwhile; endif; ?> <?php if ( $ignores AND is_array($ignores) ) { // Create a comma separated string of ignore ID's foreach ( $ignores AS $k => $v ) { $ignore_str .= $v.','; } // Trim the ignore string of any rogue commas $ignore_str = ltrim($ignore_str, ','); $ignore_str = rtrim($ignore_str, ','); $ignore = site_url('page/'.$paged.'/?ignore='.$ignore_str.''); } ?> <a href="#" rel="<?php echo $ignore; ?>" id="load-more">Load More Posts</a> </div> <?php if ( !$my_query->have_posts() ) : ?> <section id="no-posts"> <div id="post-0" class="post error404 not-found"> <h1 class="entry-title"><?php _e( 'Not Found', 'twentyten' ); ?></h1> <div class="entry-content"> <p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'twentyten' ); ?></p> </div> </div> </section> <?php endif; ?> <script type="text/javascript"> (function($){ $("#load-more").on('click', function(e) { e.stopImmediatePropagation(); $("#posts").append("<div id='loading'><p>Loading posts</p></div>"); $("<div>").load($(this).prop('rel') + ' #posts', function() { $('#posts').append($(this).find("#posts").html()).fadeIn('slow'); $("#loading").remove(); }); if ($("#no-posts")) { $("#no-posts").remove(); $("#load-more").remove(); } e.preventDefault(); }); })(jQuery); </script> 

Я нашел решение, но очень тяжело, но я стараюсь …
Шаг за шагом:

Сначала вам нужно открыть index.php и вставить этот код:

 <script> (function($) { $(document).ready(function() { var refreshId = setInterval(function() { $('#content').fadeOut("fast").load('new.php').fadeIn("fast"); }, 30000); }); })(jQuery); </script> 

И вам нужно изменить идентификатор в funcktion на ваш идентификатор div (так что часть «#content»).

Шаг 2: Создайте файл, имя – new.php.
Файл находится на вашей WWW карте или public_html.
Содержимое файла:

 <?php require_once("wp-blog-header.php"); ?> 

И вы должны найти на тему post hooks, например, для моей темы:

 <div id="content" <?php cyberchimps_filter_content_class(); ?>> <?php do_action( 'cyberchimps_before_content'); ?> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> <?php endwhile; ?> <?php elseif ( current_user_can( 'edit_posts' ) ) : ?> <?php get_template_part( 'no-results', 'index' ); ?> <?php endif; ?> <?php do_action( 'cyberchimps_after_content'); ?> </div> 

Если вы где-нибудь найдете эту часть, вставьте под <?php require_once("wp-blog-header.php"); ?> <?php require_once("wp-blog-header.php"); ?> .
Когда вы закончите, вы должны найти файл, в котором можно определить, сколько из div (мое имя div «#content») и должно быть добавлено! Important atribute для с.
Пример:

 min-width:850px !important; 

Заключительный этап:
Укажите тип ссылок:
wp-admin -> permalinks -> Тип сообщения по умолчанию
Это весело.
Thx за помощь в помощи на этой странице .