我正在为WordPress开发一个插件。
寻找解决方案我想在用户单击链接时插入记录(可能是任何CRUD操作order-button
我对Ajax非常陌生,所以很困惑当用户单击产品网格上的订单链接时,应该如何将其添加到自定义表中。
我在Ajax回调函数中设置了所有无法获取链接数据属性的bug,以将其传递给jQuery Ajax方法。
排队脚本
function gs_enqueue_ajax_scripts()
{
wp_register_script(\'gs_ajax\', GROUP_SHOP_ROOT . \'public/js/orders-ajax.js\', [\'jquery\'], 1.0, true);
wp_localize_script(\'gs_ajax\', \'ajax_vars\', [
\'ajax_url\' => admin_url(\'admin-ajax.php\'),
\'nonce\' => wp_create_nonce(\'gs_nonce\')
]);
wp_enqueue_script(\'gs_ajax\');
}
add_action(\'wp_enqueue_scripts\', \'gs_enqueue_ajax_scripts\');
Ajax操作和回调函数我已经尝试过传递静态数据并获取控制台输出。否则,它会给出null,因为它没有考虑将数据直接设置到AJAX数据参数中
How can I get data dynamically in callback function from the clicked anchor tag?add_action(\'wp_ajax_gs_order\', \'gs_ajax_callback\');
add_action(\'wp_ajax_nopriv_gs_order\', \'gs_ajax_callback\');
function gs_ajax_callback()
{
/**
* I have set statically to check if it works
* Of course, this is working since it is static
* BUT I WANT DATA HERE DYNAMICALLY TO PASS IN AJAX
*/
/*$data = [
\'product_groups\' => 1,
\'products\' => 5
];*/
/*echo json_encode($data);*/
// run the query to add entry
/*$order = new Group_Shop_Order();
$order->create_order(194, $products_ids, $product_groups_ids);*/
wp_die();
}
HTML-产品网格项
<li class="gs-p-item">
<div class="gs-p-item-container">
<p class="gs-p-name">
<a href="http://to-product-page" title="Id adipisci dolores dicta">Id adipisci dolores dicta</a>
</p>
<p class="gs-p-price">38.90</p>
<a class="gs-button order-button et_pb_button" data-pid="168" href="javascript:void(0)" id="gs-p-168">Order</a>
</div>
</li>
Javascript数据参数正在返回
null
价值
var $button = $(\'.order-button\');
console.log(ajax_vars);
$button.attr(\'href\', \'javascript:void(0)\');
$button.on(\'click\', function () {
$.ajax({
type: "POST",
url: ajax_vars.ajax_url,
data: {
action: \'gs_order\',
nonce_data: ajax_vars.nonce,
product_groups: $(this).data("pgid"),
products: $(this).data("pid")
},
dataType: \'JSON\',
success: function (data) {
$(\'#response\').html(data);
console.log(data);
},
error: function (data) {
$(\'#response\').html(data);
console.log("Error is there"); //error
}
}); // ajax end
}); // on button click
控制台输出
Object
ajax_url: "http://wpdev.org/wp-admin/admin-ajax.php"
nonce: "34cb70d514"
__proto__: Object
null
最合适的回答,由SO网友:Jacob Peattie 整理而成
如果这是您对AJAX帖子的请求数据:
data: {
action: \'gs_order\',
nonce_data: ajax_vars.nonce,
product_groups: $(this).data("pgid"),
products: $(this).data("pid")
},
然后您访问
product_groups
和
products
像这样:
$data = [
\'product_groups\' => $_POST[\'product_groups\'],
\'products\' => $_POST[\'products\'],
];
只需确保根据需要对数据进行清理和转义即可。如果它们是身份证,你可以用
absint()
:
$data = [
\'product_groups\' => absint( $_POST[\'product_groups\'] ),
\'products\' => absint( $_POST[\'products\'] ),
];
要验证nonce,请使用:
check_ajax_referer( \'gs_nonce\', \'nonce_data\' );
总之:
function gs_ajax_callback()
{
check_ajax_referer( \'gs_nonce\', \'nonce_data\' );
$data = [
\'product_groups\' => absint( $_POST[\'product_groups\'] ),
\'products\' => absint( $_POST[\'products\'] ),
];
$order = new Group_Shop_Order();
$order->create_order( 194, $data[\'products\'], $data[\'product_groups\'] );
wp_die();
}
PS:我不知道是什么
Group_Shop_Order
或者它是如何工作的,所以我不能说
$order->create_order()
是正确的。我只是想看看你的代码。