在single.php循环中,我有一个select标记,其中的选项是通过自定义查询返回的当前类别的帖子。
在更改选定的选项时,我有许多javascript函数运行良好,但是其中的最后一个函数(function f_next-previous)似乎不起作用。
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内容为:
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。
hakre
换句话说,对我来说,最好的方法是使用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您的主题中(或直接在您的插件文件中),添加:
functions.php
add_action('wp_ajax_nextPrevious', 'nextPrevious'); add_action('wp_ajax_nopriv_nextPrevious', '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首页教程。