我目前正在尝试通过POST方法将插件小部件中的代码中的某些数据发送到主题的存档。php页面。
包含jquery/ajax数据的代码是:
<a class="ajax-post" data-year="\'.$previous ->year .\'" data-month="\'.$previous->month.\'" data-category="\'.$category.\'" href="\' . filter_date_link($category,$previous->year, $previous->month, $day=false) . \'" title="\' . esc_attr( sprintf(__(\'View posts for %1$s %2$s\'), $wp_locale->get_month($previous->month), date(\'Y\', mktime(0, 0 , 0, $previous->month, 1, $previous->year)))) . \'" id="previous_link">« \' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . \'</a></td>\';
$calendar_output .= "\\n\\t\\t".\'<td colspan="3" id="next"><a class="ajax-post" data-year="\'.$next ->year .\'" data-month="\'.$next->month.\'" data-category="\'.$category.\'"href="\' . filter_date_link($category,$next->year, $next->month, $day=false) . \'" title="\' . esc_attr( sprintf(__(\'View posts for %1$s %2$s\'), $wp_locale->get_month($next->month), date(\'Y\', mktime(0, 0 , 0, $next->month, 1, $next->year))) ) . \'" id="next_link">\' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . \' »</a></td>\';
js代码是:
jQuery(document).ready(function($){
$(\'#next_link\').click(function(e){
e.preventDefault();
var $aid =$(\'#next_link\'),
year =$aid.data(\'year\'),
month =$aid.data(\'month\'),
category =$aid.data(\'category\');
});
$(\'#previous_link\').click(function(e){
e.preventDefault();
var $aid =$(\'#previous_link\'),
year =$aid.data(\'year\'),
month =$aid.data(\'month\'),
category =$aid.data(\'category\');
});
console.log(\'category: \' + category);
$.ajax({
cache: false,
timeout: 8000,
type: \'POST\',
data: {year : year, month: month, category: category},
url: \'/path/myfile.php\',
success: function(data) {},
error: function() {}
});
});
使用此代码的页面为:
<?php
//Specific class for post listing */
$blog_type = sq_option(\'blog_type\',\'masonry\');
$template_classes = $blog_type . \'-listing\';
if ($blog_type == \'standard\' && sq_option(\'blog_meta_status\', 1) == 1) { $template_classes .= \' with-meta\'; }
add_filter(\'kleo_main_template_classes\', create_function(\'$cls\',\'$cls .=" posts-listing \'.$template_classes.\'"; return $cls;\'));
if(isset($_POST[\'category\'])){
$category=$_POST[\'category\'];
$year=$_POST[\'year\'];
$month=$_POST[\'month\'];
if(isset($_POST[\'day\'])) {
$args = array(\'category_name\' => $category ,
\'date_query\' => array(
array(
\'year\' => $year,
\'month\' => $month,
\'day\' => $day,
),
\'column\' => \'post_date\',
),
);
The
$args
数组将用于在WP循环中创建新查询。
我对php很有经验,但AJAX和jQuery对我来说有点陌生。
我遗漏了什么?我需要添加/删除什么才能使其工作。
UPDATES:
- 当使用上面的代码并在调试器中检查控制台时,我得到:加载资源失败:服务器响应状态为404(未找到)
- 通过使用kaiser建议的解决方案修复了上述问题,但是我现在在jQuery的第29行发现了这个错误:未捕获引用错误:类别未定义这个问题目前我还没有找到一个可理解的答案:“我应该在哪里包括本地化和对jQuery的调用,以便变量实际上以post格式传递?”
以下是我使用enqueue将脚本附加到插件文件中的代码(不确定位置或方式是否正确):
add_action( \'wp_enqueue_scripts\', \'theme_enqueue_scripts\' );
function theme_enqueue_scripts() {
// Enqueue and Localize AJAX JavaScript Functions File
wp_enqueue_script( \'ajax-categories-js\', plugins_url( \'events-calendar-manager/inc/js/js.js\' ), array(\'jquery\'));
}