Load posts dynamically

时间:2012-08-29 作者:Deon

我正在寻找一个解决方案/指导,如何在模板的左列中以分层方式列出帖子链接,当选择链接时,它会在右列中加载帖子,但整个页面不会刷新?

谢谢Deon

Update for Marfarma\'s help below

感谢您的回复。在阅读了许多页面和帖子后,我能够让它正常工作。我现在需要注意的一点是,右侧列中的链接的href值为#。我有一个主页设置,用户可以选择一条培训路径,将他们带到上面讨论的页面。但我在主页上也有单独的链接,以防用户想跳到特定的主题。因此,现在我的问题是,我可以对它们进行单独编码,并让它们转到单个帖子模板,但我更希望用户转到上面讨论的页面,并从列表中选择正确的链接主题。你知道如何做到这一点吗?我以某种方式假设了第一步,而不是将#作为href,我必须将正确的id/post-slug传递为href?然后我可以通过javascript链接到这些内容?谢谢你的帮助。下面是我使用的代码。

<?php
wp_enqueue_script( \'my-ajax-request\', get_stylesheet_directory_uri( __FILE__ ) . \'/js/ajax.js\' );
wp_localize_script( \'my-ajax-request\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
?>

    <?php
    global $wpdb;
    global $post;
    $querystr = "
    SELECT * FROM $wpdb->posts
    LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
    LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
    WHERE $wpdb->terms.name = \'pathologist\'
    AND $wpdb->term_taxonomy.taxonomy = \'category\'
    AND $wpdb->posts.post_status = \'publish\'
    AND $wpdb->posts.post_type = \'post\'
    AND $wpdb->postmeta.meta_key = \'order\'
    ORDER BY $wpdb->postmeta.meta_value ASC
    ";
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    ?>


     <?php if ($pageposts): ?>
     <?php global $post; ?>
<div class="textwidget">
<ul id="nav">
<li class="list-title">Navigating your Workspace</li> 
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>   
<li class="post" id="<?php the_ID(); ?>">
  <a href="#" class="ajax-click" rel="bookmark" title="<?php the_title(); ?>">
  <?php the_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>
</div>
还有ajax。以上为js。

 jQuery(document).ready(function() {

     jQuery(".ajax-click").click(function() {
        jQuery("#loading-animation").show();
        var post_id = $(this).parent("li").attr("id");
        var ajaxURL = MyAjax.ajaxurl;

        jQuery.ajax({
        type: \'POST\',
        url: ajaxURL,
        data: {"action": "load-content", post_id: post_id },
        success: function(response) {
             jQuery("#container-help-page").html(response);
             jQuery("#loading-animation").hide();
        return false;
    }
});
});
});

1 个回复
最合适的回答,由SO网友:marfarma 整理而成

以下是我的做法。如果你需要更多细节,请在评论中告诉我。

1) 创建一个模板,用于提取初始页面内容——默认的右面板内容和左面板的链接列表。确保链接的post\\u id设置为id属性的值。

2) 编写一个Javascript请求函数,根据在左面板中单击的链接,使用ajax调用请求右面板的内容。传递id属性和回调函数的值(从步骤3开始)。编写一个init函数,将其添加到每个左侧面板链接的onclick事件中。将init函数添加到页面加载事件中。

3) 编写Javascript回调函数,用请求的结果替换左侧面板内容。

4) 添加ajax操作过滤器,以便WordPress知道如何处理您的请求。您还需要一个php函数,该函数接受post id并返回发送回页面的内容。Here\'s the codex page on using Ajax in WordPress. 下面是关于在从前端调用ajax时使用ajax过滤器操作的一个重要细节:https://wordpress.stackexchange.com/a/53729/4645 将php代码放入函数中。php文件或将其添加到特定于站点的插件中。

5) 将所有javascript放入一个文件中。将其放入函数中。php文件或特定于站点的插件。(Here\'s a tutorial on how only load the code for a specific template.)

Here\'s a tutorial on loading posts through ajax, that will give you some code to get you started.

结束

相关推荐

使用AJAX请求加载侧边栏

对于一个项目,我必须提高SEO性能,其中一个优化就是用ajax请求加载侧栏。我一直在通过文档、源代码、插件库寻找这个解决方案,但没有成功。所以我需要你的帮助和建议。有可能做到这一点吗?如果是,最好的方法是什么?谢谢