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

Posted

技术标签:

【中文标题】Wordpress - 如何通过 AJAX 获取更多帖子?【英文标题】:Wordpress - how can I fetch more posts via AJAX? 【发布时间】:2012-08-06 22:26:24 【问题描述】:

首先,我认为这是一个远景,但希望有人可以提供帮助。

为了解释当前的情况,目前我有一个自定义插件,它可以获取有关用户及其 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>

我尝试按照本教程进行操作,但没有使用单独的插件,而是将代码放在我现有的插件中,但现在我的页面无法加载:

http://www.problogdesign.com/wordpress/load-next-wordpress-posts-with-ajax/

理想情况下,我想要的是当单击加载更多按钮时,再获取 4 个帖子并显示它们。

如果有人可以提供帮助,我将不胜感激。

更新

好的,

到目前为止,我已经在我的 jQuery 中添加了调用 php 文件,该文件有望返回帖子,但它不起作用。

我在想是因为它不知道 WordPress 的功能是什么?

如果我在我的加载更多脚本中输入一个简单的echo,jQuery 成功函数会显示一个警告说它有效,但是如果我开始做 WordPress 的东西我得到一个内部服务器错误,这是加载中的代码-more.php 文件:

// load wordpress into template
$path = $_SERVER['DOCUMENT_ROOT'];
define('WP_USE_THEMES', false);
require($path .'/wp-load.php');


$blogger_id = $_GET['id'];
$firstname  = $_GET['firstname'];
$surname    = $_GET['surname'];
$posts      = $_GET['posts'] + 4;
$category   = $_GET['category'];
$image      = $_GET['image'];

// The Query
query_posts('paged='.get_query_var('paged').'&posts_per_page=' . $posts . '&author='.$blogger_id);

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

// then the same loop as in my page that is making the ajax call.

【问题讨论】:

嗯,我会使用 jQuery 和这篇文章来拉取正确的帖子:scribu.net/wordpress/wp-pagenavi/… 当您说页面无法加载时,您是什么意思?它是否显示一些错误消息? @VladimirKadalashvili - 是的,分页符,虽然没有显示错误消息,但这可能是因为我没有打开错误报告。 @Jeremy 谢谢,我会试试看会发生什么! 【参考方案1】:

经过一番努力,我找到了答案,这里是为那些卡在同一位置的人提供的解决方案。

这进入您的插件页面,您可以在其中获取用户等的帖子。

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

然后在你的主题的functions.php中,把你的函数做你的ajax请求:

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

就是这样!

【讨论】:

我明白,已经很久了..) 但是,请说一下这个 php 文件应该是什么? url: "/wordpress/wp-admin/admin-ajax.php" 我应该如何“定义你的帖子标记的结构”?只插入html没有任何东西?谢谢。 嗨@mankutila,已经有一段时间了,所以我很难记住。我确定loadMore() 进入functions.php(来自您的主题),正如问题中所述,/wordpress/wp-admin/admin-ajax.php 必须以某种方式使用它,因为如果您编辑了 WordPress 核心文件,您每次都会丢失所有更改你更新了。提到的标记只是你的 html,所以通过字符串连接来构建它,例如在循环中:$output += 'your html here'; 这意味着我应该而不是// define the structure of your posts markup 插入`$output=''?谢谢 @mankutila 是的,完全正确。自从 WordPress 从那时到现在发布了几个版本以来,情况可能已经发生了变化,但希望它仍然可以工作,因为我没有做过任何 WP 的东西,所以我无法知道事情是否仍然相同. 太棒了!很高兴我能帮上忙。

以上是关于Wordpress - 如何通过 AJAX 获取更多帖子?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过一个 ajax 调用执行两个操作 - WordPress

使用 ajax 通过 post-ID 更改 wordpress 中 div 内的 the_content() 内容

在 wordpress 插件下未调用 Ajax 功能

如何在 wordpress 中通过 jQuery/Ajax 上传图片

如何在 WordPress 简码中使用 AJAX?

Wordpress 如何使用 Ajax 显示从成功的 insert_post() 返回的新数据?