自动拉出较新的帖子并附加到当前页面。

时间:2011-10-29 作者:John

我有一个页面,当前使用常规WP\\U查询加载自定义帖子类型的帖子。自定义帖子类型用于新闻文章。更新的新闻文章(帖子)不断被撰写,因此需要加载更新的帖子,而无需用户刷新页面。

我所期望的效果与人们在Facebook或Twitter上所能找到的效果相似。只要这些网站上有新帖子或推特,新帖子就会自动添加到已显示帖子的顶部。

关于如何实现这一点,有什么代码片段或想法吗?

你好,约翰

2 个回复
最合适的回答,由SO网友:Dwayne Charrington 整理而成

我最近的处境和你一样。我这样做可能是错误的,而且容易出现bug,但如果你能接受,这可能会有所帮助。

基本上,您可以在循环文件的顶部创建一个空数组,例如循环索引。php。

$忽略=数组();

然后在post循环中,您希望将这些post ID添加到数组中(在while循环中)。

$忽略[]=$发布->ID;

很明显,您将有一个链接,可以单击该链接来显示更多的帖子,并绑定了一个Javascript单击事件,可能是使用jQuery。在链接上,将rel标记设置为ID的数组,您必须对该数组执行foreach操作,并用逗号分隔每个标记。

然后在循环模板中查找从AJAX url传递的GET变量,并根据WP\\U查询使用post\\u not\\u in条件,以便它不会加载到已加载帖子的ID中。

如果您需要示例代码,我很乐意为您编写一个示例。

我最近的处境和你一样。我这样做可能是错误的,而且容易出现bug,但如果你能接受,这可能会有所帮助。

基本上,您可以在循环文件的顶部创建一个空数组,例如循环索引。php。

$忽略=数组();

然后在post循环中,您希望将这些post ID添加到数组中(在while循环中)。

$忽略[]=$发布->ID;

很明显,您将有一个链接,可以单击该链接来显示更多的帖子,并绑定了一个Javascript单击事件,可能是使用jQuery。在链接上,将rel标记设置为ID的数组,您必须对该数组执行foreach操作,并用逗号分隔每个标记。

然后在循环模板中查找从AJAX url传递的GET变量,并根据WP\\U查询使用post\\u not\\u in条件,以便它不会加载到已加载帖子的ID中。

如果您需要示例代码,我很乐意为您编写一个示例。

**Update w/ Example Code **

<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>

SO网友:Szántai Ádám

我找到了解决方案,但很难解释,但我尝试
逐步:

首先,您需要打开索引。php并粘贴此代码:

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

</script>
您需要将function中的id更改为div id(因此“#content”部分)。

步骤2:装箱一个文件,名称是新的。php
文件放置在wwww地图或public\\u html中
文件内容:

<?php require_once("wp-blog-header.php"); ?>
您必须在主题帖子挂钩上找到我的主题示例:

<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"); ?>.
完成后,您应该找到一个文件,用于确定有多少div(我的div名称为“#content”)属于和必须添加!重要的安替比妥
示例:

min-width:850px !important;
最后一步:
设置链接类型:
wp admin-->permalinks-->默认帖子类型。
这就是它的乐趣所在on this page .

结束

相关推荐

AJAX日历导航返回-1

我想通过$month 和$year 单击上一个/下一个链接时通过AJAX获得的值,但我得到的只是-1 内容应该在哪里。我的JavaScript函数和AJAX调用位于自定义页面模板中,page-calendar.php 和functions.php, see all of the code here. 总之,下面是相关的AJAX脚本:在里面functions.php:/* draw_ajax_calendar($month, $year) function, see link above for that