可能有一个简单的解决方案,但我正在努力解决这个问题。
我一直在使用wordpress插件来打印帖子(这里的帖子类型是woocommerce product
)元数据在页面上,用户将有一个输入文本字段来触发产品页面中的功能。我在这里使用AJAX将输入数据发送到我的wordpress函数。
问题是,当我使用一些模拟的垃圾数据测试代码时,它运行正常,但是当我使用get_post_meta
调用post meta时代码没有发送任何数据。
如果我们通过AJAX调用post meta,有什么可以应用吗?我在下面分享我的代码。
wordpress中的代码:
add_action('init', 'timeslot_ajax_handle');
function timeslot_ajax_handle() {
wp_register_script("timeslot_ajax_script", um_product_url . 'assets/js/timeslot_ajax.js', array('jquery'));
wp_localize_script('timeslot_ajax_script', 'myAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
wp_enqueue_script('jquery');
wp_enqueue_script('timeslot_ajax_script');
}
add_action("wp_ajax_timeslot_ajax_submit", "timeslot_ajax_submit");
add_action("wp_ajax_nopriv_timeslot_ajax_submit", "timeslot_ajax_submit");
function timeslot_ajax_submit() {
//function to process ajax requests from product page
if (!wp_verify_nonce($_REQUEST['nonce'], "submitted_date")) {
exit("An error occured");
}
global $wpdb, $post, $product, $woocommerce;
$product_id = $_REQUEST["post_id"];
$bookdate = $_REQUEST["bookdate"];
$result['type'] = "success";
$result['result_text'] = get_post_meta($product_id, '_total_sales', true);
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$result = json_encode($result);
echo $result;
} else {
header("Location: " . $_SERVER["HTTP_REFERER"]);
}
die();
}
AJAX代码:
jQuery(document).ready( function() {
jQuery("#datepicker_input").change( function() {
jQuery('#day_timeslots_list').css('display', 'none');
jQuery('#fountainH').css('display', 'block');
var bookdate = jQuery('#dp_input').val();
// alert(bookdate);
post_id = jQuery(this).attr("data-post_id");
nonce = jQuery(this).attr("data-nonce");
jQuery.ajax({
type : "post",
dataType : "json",
url : myAjax.ajaxurl,
data : {action: "timeslot_ajax_submit", post_id : post_id, nonce: nonce, bookdate: bookdate},
success: function(response) {
if(response.type === "success") {
jQuery('#fountainH').css('display', 'none');
jQuery('#day_timeslots_list').css('display', 'block');
jQuery("#timeslot_active").html(response.result_text);
} else {
alert("There is an error");
}
}
});
jQuery('#fountainH').css('display', 'block');
});
});