通过AJAX动态更改Wordpress中的导航链接(下一个和上一个)

时间:2013-03-02 13:29:21

标签: javascript ajax wordpress

我在wordpress网站上,在single.php的循环中,一个选择标记,其中的选项是通过自定义查询返回的当前类别的帖子。

在更改所选选项时,我有很多javascript函数运行良好,但其中的最后一个函数(function f_next-previous)似乎无法正常工作。

此功能的目的是更新下一个和上一个链接,而无需重新加载页面。

我模板中与导航链接(下一页和上一页)相关的代码运行良好且位于上方:

<div id="nav-above" class="navigation">

<div class="nav-previous"><?php previous_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/previous.png" />' ); ?></div>

<div class="nav-next"><?php next_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

</div><!-- #nav-above -->   

此功能的javascript代码为:

function f_next-previous(id)
{
       $.ajax({  
       cache: true,  
       type: "GET",  
       timeout: 5000,   
       url: 'wp-content/themes/twentyten/pages/next-previous.php?p='+id,  
       success: function(msg)  
        {  

    $('#nav-above').html(msg);

        },  
        error: function(msg)  
        {  
           alert("Your browser broke!");
                return false;
        }  
});

}

文件next-previous.php内容为:

<?php
$p=$_GET['p']; 
require( '../../../wp-load.php' );



$my_query = new WP_Query();
$my_query->query(array( 'post__in' => array($p)));

if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();  ?>


<div class="nav-previous"><?php previous_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/previous.png" />' ); ?></div>
<div class="nav-next"><?php next_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

<?php

endwhile;
endif;

?>

在通过给p参数赋值来测试这个php文件时,它在浏览器中给出了逻辑结果。 Jquery和函数脚本都包含在内,我网站上的所有AJAX都可以。我在这项工作中缺少什么????

更新 请注意,负责触发AJAX调用的single.php文件部分是:

   <form method="post" action="">  

    <select class="select2"  name="" id="" >
    <option value="<?php the_ID();?>"><?php the_title();?></option>

    <?php 
global $post;
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$myposts = get_posts("paged=$paged&category=4");

foreach($myposts as $post) :?>

        <option value="<?php the_ID();?>"><?php the_title();?></option>

        <?php endforeach;
        wp_reset_postdata(); ?> 

        </select>
        </form>

1 个答案:

答案 0 :(得分:9)

首先,我想要注意的是,我在问题中提到的方法很糟糕,根据几乎在教程中谈论有关WordPress的AJAX。所以我决定根据hakre及其链接http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Viewer-Facing_Side的建议进行更改。

换句话说,对我来说最好的方法是使用wp-admin / admin-ajax.php在Wordpress中使用内置的AJAX。应将AJAX请求定向到此文件。我知道文件名的“admin”部分有点误导。但是前端(查看方)和管理面板中的所有请求都可以在admin-ajax.php中处理,具有很多好处,特别是对于安全性。

步骤如下:

1.提交AJAX请求的JavaScript代码应如下所示:

    $(document).ready(function() {
        $('.select2').change(function(e) {
    e.preventDefault();

    var v = $('.select2 option:selected').val(); 


            $.ajax({
                type: "GET",
                url: "wp-admin/admin-ajax.php", // check the exact URL for your situation
                dataType: 'html',
                data: ({ action: 'nextPrevious', id: v}),
                success: function(data){

                $('#nav-above').html(data);

                },
                error: function(data)  
                {  
                alert("Your browser broke!");
                return false;
                }  

            }); 

    }); 
}); 

请注意,在放置JS脚本时(通常在wp-footer()之前的footer.php中)你应该尊重Wordpress的要求

2-处理行动:

在主题的functions.php中(或直接在您的插件文件中),添加:

add_action('wp_ajax_nextPrevious', 'nextPrevious');
add_action('wp_ajax_nopriv_nextPrevious', 'nextPrevious');

并在同一个文件nextPrevious中定义回调函数,如下所示:

function nextPrevious() {

$p= $_GET['id'];
$my_query = new WP_Query();

$my_query->query(array( 'post__in' => array($p)));

if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?>



 <div class="nav-previous"><?php previous_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/previous.png" />' ); ?></div>

<div class="nav-next"><?php next_post_link( '%link', '<img height="34" src="' . get_bloginfo("template_directory") . '/images/next.png" />' ); ?></div>

<?php endwhile;
endif;                  

wp_reset_query();

die();

}

不要忘记模具功能,这是强制性的。

有关Wordpress中AJAX的更多详细信息,Google首页教程很好。