Ich versuche, meine benutzerdefinierte Datenbanktabelle zu aktualisieren, wenn Änderungen in einem Dialogfeld vorgenommen werden. Das Skript für das Dialogfeld und den Ajax-Aufruf lautet wie folgt:
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");
});
});
Das obige Skript funktioniert gut, außer für den Ajax-Teil. Der obige Code ist eine separate Javascript-Datei, die ich sogar in meine PHP-Datei einreihe. Das Folgende ist der auf Ajax-Aufrufe bezogene Code zum Aktualisieren der Datenbank, bei dem die ID während des Ajax-Aufrufs übergeben wurde:
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' ) ) );
}
EDITFolgendes wurde zum Skript hinzugefügt, Konsole zeigt "Erfolg"
success: function(){
console.log("Success");
}
Mein Tabellenname ist wp_feedmanager und ich versuche, die Spalte 'message' zu aktualisieren. Aber es wird nicht aktualisiert? Irgendwelche Vorschläge, was getan werden sollte?
Für zukünftige Referenz -
Das Problem war hier - Der dritte Parameter der Update-Abfrage sollte sein Array ('id' => $ feedid) Auch die von Milo vorgeschlagene Änderung des Tabellennamens muss enthalten sein!
Unter der Annahme, dass Ihr Javascript- und Ajax-Aktionscode ansonsten korrekt sind, richten Sie den admin-ajax.php
mit dem richtigen Pfad durch Lokalisieren Ihr in die Warteschlange gestelltes Skript aus:
wp_localize_script(
'your_script_handle',
'script_data',
array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) )
);
Verweisen Sie dann in Ihrem Javascript auf diese URL mit:
url: script_data.admin_ajax
EDIT -
ah, das habe ich das erste mal verpasst: $wpdb->feedmanager
wird nur gesetzt, wenn du ihn explizit irgendwo gesetzt hast. $wpdb->table_name
funktioniert nur für native Tabellen, da diese Member-Vars direkt in der wpdb-Klasse fest codiert sind. ändere es in einen String 'wp_feedmanager'
.
beachten Sie auch, dass das wp_
-Tabellenpräfix über wp-config.php
geändert werden kann (und sollte). Verwenden Sie $wpdb->prefix
, um Ihren Code portabler zu machen:
$table_name = $wpdb->prefix . 'feedmanager';