Php 如何通过AJAX获取更多帖子?

Php 如何通过AJAX获取更多帖子?,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,首先,我认为这是一个漫长的过程,但希望有人能提供帮助 为了解释目前的情况,目前我有一个自定义插件,它可以获取关于用户及其4篇最新帖子的各种信息 我也在使用WPBook插件(这是在facebook上的,只是一个典型的wordpress站点) 好的,下面是我的代码,它为一个用户获取了4篇最新的帖子: // The Query query_posts('posts_per_page=4&author='.$blogger_id); // set $more to 0 in order to

首先,我认为这是一个漫长的过程,但希望有人能提供帮助

为了解释目前的情况,目前我有一个自定义插件,它可以获取关于用户及其4篇最新帖子的各种信息

我也在使用WPBook插件(这是在facebook上的,只是一个典型的wordpress站点)

好的,下面是我的代码,它为一个用户获取了4篇最新的帖子:

// The Query
query_posts('posts_per_page=4&author='.$blogger_id);

// set $more to 0 in order to only get the first part of the post
global $more;
$more = 0;

// the Loop
while (have_posts()) : the_post();
?>
    <div class="oe-grid-box">
        <a href="<?php the_permalink() ?>" <?php the_title()?></a>
        <div class="oe-grid-box-content">
            <?php echo the_content( '...' ); ?>
        </div>
        <div class="oe-grid-pic">
            <a href="<?php the_permalink() ?>">
                <span class="<?php echo strtolower($category); ?>"></span>
            </a>
            <?php echo $image; ?>
        </div>
    </div>
<?php
endwhile;

// Reset Query
wp_reset_query();
?>


<div id="load-more">Load More</div>

经过大量的努力,我找到了答案,这里有一个解决方案,适用于那些处于相同位置的人

这会进入你的插件页面,在那里你会得到一个用户的帖子等等

<script type="text/javascript">
    $(document).ready(function() {

        posts = 8;
        author_posts = parseInt(<?php echo $author_posts; ?>);

        $("#link_selector").click(function() {

            // alert('posts - ' + posts + 'author posts - ' + author_posts);


            if ((posts - author_posts) > 3) {
                $("#link_selector").text('No more posts!');
            }
            else {

                var category        = '<?php echo strtolower($category); ?>';
                var id              = '<?php echo $blogger_id; ?>';
                var firstname       = '<?php echo $firstname; ?>';
                var surname         = '<?php echo $surname; ?>';


                // alert(posts + category + id + firstname + surname);

                $.ajax({
                    type: "GET",
                    url: "/wordpress/wp-admin/admin-ajax.php",
                    dataType: 'html',
                    data: ({ action: 'loadMore', id: id, firstname: firstname, surname: surname, posts: posts, category: category}),
                    success: function(data){
                        $('#ajax_results_container').hide().fadeIn('slow').html(data);
                        posts = posts + 4;

                        if ((posts - author_posts) > 3) {
                            $("#link_selector").text('No more posts!');
                        }

                    }
                });
            }

        });
    });

    </script>       
然后,在函数结束后,放入动作挂钩

add_action('wp_ajax_loadMore', 'loadMore');
add_action('wp_ajax_nopriv_loadMore', 'loadMore'); // not really needed

就这样

嗯,我会使用jQuery和这篇文章来获取适当的帖子:当你说页面无法加载时,你是什么意思?它是否显示了一些错误消息?@VladimirKadalashvili-是的,分页符,但没有显示错误消息,但这可能是因为我没有打开错误报告功能。@Jeremy谢谢,我会尝试一下,看看会发生什么!我明白,这是一个很长的时间…但是,请说,什么应该在这个php文件<代码>url:“/wordpress/wp admin/admin ajax.php”我应该如何“定义帖子标记的结构”?只插入html而不插入任何内容?谢谢。嗨@mankutila,已经有一段时间了,所以我很难记住。我确信
loadMore()
进入
functions.php
(来自您的主题)正如问题中所述,
/wordpress/wp admin/admin ajax.php
必须以某种方式使用它,因为如果您编辑了wordpress核心文件,那么每次更新时您都会丢失所有更改。所提到的标记只是您的html,因此通过字符串连接来构建它,例如在循环中:
$output+='yourHTML here'
这意味着我应该代替
//定义帖子标记的结构
插入“$output=”?Thanks@mankutila是的,没错。从那时到现在,WordPress已经发布了一些版本,事情可能已经改变了,但希望它仍然可以工作,因为我没有做任何WP的事情,所以我不知道事情是否仍然是一样的。太好了!很高兴我能帮忙。
function loadMore() {

    $blogger_id = $_GET['id'];
    // get your $_GET variables sorted out

    // setup your query to get what you want
    query_posts('posts_per_page=' . $posts . '&author='.$blogger_id);

    // initialsise your output
    $output = '';

    // the Loop
    while (have_posts()) : the_post();

        // define the structure of your posts markup

    endwhile;

    // Reset Query
    wp_reset_query();

    die($output);

}
add_action('wp_ajax_loadMore', 'loadMore');
add_action('wp_ajax_nopriv_loadMore', 'loadMore'); // not really needed