当前位置: 首页 > 面试题库 >

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

卫宏硕
2023-03-14
问题内容

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

在更改选定的选项时,我有许多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都可以。我在这项工作中缺少什么????

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

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

问题答案:

首先,我想指出的是,根据在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();

}

不要忘记die功能,它是强制性的。

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



 类似资料:
  • 我非常努力地显示下一个&上一个按钮,不管它是否在我的wordpress主题上处于活动状态。我似乎想不出一个办法来让它工作。我正在尝试这样做:http://www.kinocreative.co.uk/hints-and-tips/wordpress-nextpreview-post-navigation-with-images-and-inactive-links/extracty but for

  • 我正在使用引导4,我有一个导航栏,上面有一些使用导航链接类的链接,还有一个使用导航链接的侧边栏导航。我需要改变一个链接的悬停颜色。最好的方法是什么?

  • 我想在同一级别内添加下一页和上一页链接。 有什么办法解决这个问题吗? 编辑:

  • 我正在创建这个WordPress主题,所有事情都进展顺利,除了一件事。我想为我的下一个/上一个页面链接设置样式,使下一个页面链接在右侧,而上一个页面链接在左侧。这是wordpress自动生成的链接,每当帖子数量达到最大值时,它就会添加到页面底部。我使用函数,我的html代码如下所示: 当然,我可以将float添加到 标记的样式中,但两个链接都将向右或向左浮动。我希望它们都在左右两边,我真的不希望在

  • 我正在Wordpress中使用快捷码和wp_link_页面功能对我的文章进行分页:https://developer.wordpress.org/reference/functions/wp_link_pages/ 然而,当用户到达文章的结尾时,我想继续下一篇文章。例如: 这是我当前的代码,目前只使用下一步和上一步进行分页。我尝试了很多方法来添加这个功能,但没有成功。 以前有人试过这个吗? 编辑:

  • 我正在用JavaStruts开发一个博客,我想知道什么时候打开一篇文章(所有记录都由数据库显示),而不是如何让链接看到下一篇文章和上一篇文章。 请帮我做链接。