单击按钮时,我正在尝试将值发送到我的wordpress数据库(wp_usermeta表)。
这是我目前所知的,我知道我需要使用AJAX发布值,我也知道wordpress有一个更新wp_usermeta表的函数,即:
update_user_meta( $user_id, 'dashboard_onboarding_status', 'myValue' );
好消息是myValue不是变量 - 我只想将“完整”这个词发送给数据库。它也是一个管理员端脚本 - 我不确定这是否会对如何调用ajax url产生影响。
以下是我的代码:
在我的主js文件中,我有以下AJAX脚本:
$('.skizzar_onabording_dashboard #next.step5').click(ajaxSubmit);
function ajaxSubmit(){
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: {
"value" : "completed"
},
success:function(data){
console.log(data);
}
});
return false;
}
因此,当用户点击应该触发AJAX功能的.skizzar_onabording_dashboard #next.step5
时。
然后在我的主插件php文件中,我有以下内容:
function myFunction(){
global $wpdb;
$user_id = get_current_user_id();
$completed = $_POST['value'];
update_user_meta( $user_id, 'onboarding_status', $completed );
die();
}
add_action('wp_ajax_myFunction', 'myFunction');
我认为不用说这不起作用,但我对使用AJAX很新,我不明白为什么。看起来它应该很简单 - 基本上我只想按一个按钮并将“completed”添加到usermeta表中的“onboarding_status”键。
答案 0 :(得分:2)
几乎所有你需要的都是here。
首先,您需要localize admin-ajax.php
,因为url: "/wp-admin/admin-ajax.php"
称之为wp_localize_script( 'some_handle', 'ajax_post_to_db', array(
'ajaxurl' => admin_url( 'admin-ajax.php'),
));
不是一个好习惯。
add_action( 'wp_ajax_my_action', 'my_action_callback' );
function my_action_callback() {
global $wpdb;
$user_id = get_current_user_id();
$completed = $_POST['value'];
update_user_meta( $user_id, 'onboarding_status', $completed );
die();
}
然后你的ajax脚本调用:
$('.skizzar_onabording_dashboard #next.step5').on('click', function(){
ajaxSubmit();
});
function ajaxSubmit(){
jQuery.ajax({
type:'POST',
dataType: 'html',
url: ajax_post_to_db.ajaxurl,
data: {
action: 'my_action_callback'
},
success: function(data){
console.log(data);
},
error : function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR + ' :: ' + textStatus + ' :: ' + errorThrown);
},
});
return false;
}
最后是js文件中的ajax
data: {
action: 'my_action_callback'
},
这应该是它。
<强>声明强>
我从不100%确定是否
data: {
'action': 'my_action_callback'
},
或
admin-ajax.php
但是试一试,看看哪一个会给你你的函数回调。我很确定它应该是第一个。
您还可以在检查器中检查ajax调用的返回。只需转到“网络”标签并选择XHR,您就会看到public double getResult() {
double log_length, log_diameter, length, diameter, result;
log_length = Integer.parseInt(getLength().toString());
log_diameter = Integer.parseInt(getDiameter().toString());
length = log_length / 100;
diameter = log_diameter * log_diameter * 3.14159265;
result = length * diameter / 40000;
return result;
}
public Cursor getPrice() {
Cursor cursor = db.query("Price", new String[]{"price_stump_kn", "price_stump_eur", "road_price_kn", "road_price_eur"}, "sort = ? AND grade = ? AND length = ? BETWEEN diameter_dg = ? AND diameter_gg = ?",
new String[]{getSort_id(), getGrade(), getLength(), getDiameter(), getDiameter()}, null, null, null);
if (cursor.moveToFirst()) {
do {
Price price = new Price();
price.setStumpPrice_kn(cursor.getString(0));
price.setStumpPrice_eur(cursor.getString(1));
price.setRoadPrice_kn(cursor.getString(2));
price.setRoadPrice_eur(cursor.getString(3));
} while (cursor.moveToNext());
}
return cursor;
}
,当您点击它时,您可以看到它发送的所有相关数据(标题,响应等)。
答案 1 :(得分:0)
添加你的ajax函数作为动作
function ajaxSubmit(){
var data = {
'action': 'myFunction',
'value' : 'completed'
};
jQuery.post("/wp-admin/admin-ajax.php", data, function(response) {
console.log(response);
});
}