ダイアログボックスで変更が行われたときに、カスタムデータベーステーブルを更新しようとしています。ダイアログボックスとAjax呼び出しのためのスクリプトは以下の通りです -
jQuery(document).ready(function($){
$("td > span").click(function(){
var id = $(this).attr('id');
var message = "message"+id;
var content = jQuery("#"+message).text();
var $dialog = $("<div></div>").html("<textarea style='width:99%; height:90%' class='popup-content'>"+content+"</textarea>").dialog({
height: 400,
width: 400,
title: 'My Data',
modal: true,
autoOpen: false,
dialogClass: 'wp-dialog',
buttons: {
"Save": function(){
$("#"+message).html($(".popup-content").val());
$.ajax({
type: "post",
url: script_data.admin_ajax,
data: {
action: "feedmng_update",
feed_id: id
}
});
}
}
});
$dialog.dialog("open");
});
});
上記のスクリプトは、Ajaxの部分を除いてすべてうまくいきます。上記のコードは、私が自分のphpファイルにエンキューさえしている個別のjavascriptファイルです。以下は、Ajax呼び出し中に渡されたIDを持つデータベースを更新するためのAjax呼び出し関連コードです。
function __construct(){
add_action( 'wp_ajax_feedmng_update', array( &$this, 'feedmng_update' ) );
add_action( 'init', array( &$this, 'feedmng_load_scripts' ) );
}
function feedmng_update(){
global $wpdb;
$feedid = $_REQUEST["feed_id"];
$wpdb->update( $wpdb->feedmanager, array( 'message' => "New data" ), array( 'id',$feedid ) );
}
function feedmng_load_scripts(){
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-ui-dialog' );
wp_enqueue_style ( 'wp-jquery-ui-dialog' );
wp_register_script( 'feedmng-popup', WP_PLUGIN_URL.'/feed-manager/mypopup.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-dialog' ) );
wp_enqueue_script( 'feedmng-popup' );
wp_localize_script( 'feedmng-popup', 'script_data', array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) ) );
}
EDITスクリプトに以下を追加し、コンソールに "Success"と表示します。
success: function(){
console.log("Success");
}
私のテーブル名はwp_feedmanagerで、私はそれを 'message'カラムに更新しようとしています。しかし、それはただ更新しないのですか?何をすべきですか何か提案?
今後の参考のために -
問題はここにありました - 更新クエリの3番目のパラメータはarray( 'id' => $ feedid)であるべきです含まれるように!
Javascriptとajaxのアクションコードがそれ以外の点で正しいと仮定して、エンキューされたスクリプトを ローカライズする ことによって正しいパスでadmin-ajax.php
をターゲットにします。
wp_localize_script(
'your_script_handle',
'script_data',
array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) )
);
次に、JavaScriptで、そのURLを参照します。
url: script_data.admin_ajax
編集 -
ああ、初めてこれを逃した:$wpdb->feedmanager
は明示的にどこかに設定しない限り設定されない。 $wpdb->table_name
はネイティブテーブルに対してのみ機能します。それらのメンバーvarはwpdbクラスに直接ハードコードされているからです。それを文字列'wp_feedmanager'
に変更してください。
また、wp_
テーブルの接頭辞はwp-config.php
を介して変更することができます(そして変更すべきです)。コードの移植性を高めるために$wpdb->prefix
を使用してください。
$table_name = $wpdb->prefix . 'feedmanager';