我正在尝试读取通过ajax调用(admin ajax.php)提交的表单POST值。这篇文章已经准备好并提交了。以下是我在子主题中的服务器端操作挂钩functions.php
add_action(\'save_post\', \'address_save_postdata\',1,1);
add_action( \'wp_ajax_wilcity_handle_review_listing\',
\'address_save_postdata\' );
add_action( \'wp_ajax_wilcity_handle_review_listing\', \'address_save_postdata\' );
下面是我如何尝试在回调函数下读取表单post值:
if ( esc_attr($_POST[\'action\']) == "wilcity_handle_review_listing") {
$lat_val = esc_attr($_POST[\'data[tmbu_location][group][tmbu_lat]\']);
$lng_val = esc_attr($_POST[\'data[tmbu_location][group][tmbu_lng]\']) ;
$address_val = esc_attr($_POST[\'data[tmbu_location][group][tmbu_address]\']) ;
$cityname_val = esc_attr($_POST[\'data[tmbu_location][group][tmbu_cityname]\']) ; }
else
{
$lat_val = esc_attr($_POST[\'tmbu_lat\']);
$lng_val = esc_attr($_POST[\'tmbu_lng\']) ; $address_val = esc_attr($_POST[\'tmbu_address\']) ; $cityname_val =
esc_attr($_POST[\'tmbu_cityname\']) ;
}
update_post_meta($post_id, \'_tmbu_lat\', $lat_val);
update_post_meta($post_id, \'_tmbu_lng\', $lng_val); update_post_meta($post_id, \'_tmbu_address\', $address_val);
update_post_meta($post_id, \'_tmbu_cityname\', $cityname_val);
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
好的,所以你的代码有很多问题。。。但我很确定我知道,最重要的是。。。
但首先要做的事。。。
使用以下代码添加AJAX回调:
add_action( \'wp_ajax_wilcity_handle_review_listing\', \'address_save_postdata\' );
add_action( \'wp_ajax_wilcity_handle_review_listing\', \'address_save_postdata\' );
将同一个函数添加两次是没有意义的。这可能是个错误,但也许你忘了添加
nopriv
到第二行。
回到主要问题
POST请求中发送了一些数组,您正试图这样访问它们:
$_POST[\'data[tmbu_location][group][tmbu_lng]\']
这行不通。
\'data[tmbu_location][group][tmbu_lng]
不是字符串键。这是一个有三个键的数组。这意味着,您应该像这样访问它:
$_POST[\'data\'][\'tmbu_location\'][\'group\'][\'tmbu_lng\']
还有一件事。你把
esc_attr
代码中的任何地方。但恐怕这没什么意义。
esc_attr
是一个对HTML属性进行转义的函数。您不会在代码中的任何地方打印任何html属性。在比较字符串或将其保存到DB之前,您不必转义字符串,在大多数情况下,您不应该这样做。