Ich habe eine benutzerdefinierte AJAX -Funktion geschrieben, in der ich einen Beitragstyp als untergeordnetes Element eines anderen Beitragstyps zugewiesen habe. In einer Funktion durchlaufe ich diese untergeordneten Beiträge und möchte die Datenbank so aktualisieren, dass sie das post_parent (den Beitrag, zu dem die untergeordneten Beiträge gehören) widerspiegelt.
Das Problem ist, dass ich die ID dieses Posts nicht von irgendwoher abrufen kann, um die Datenbank zu aktualisieren. Irgendwelche Vorschläge?
Hier ist die jQuery-Funktion:
$.ajax({
url: ajaxurl,
type: 'POST',
async: true,
cache: false,
dataType: 'json',
data: {
action: 'new_item_save',
item_order: $('#img-sortable').sortable('toArray').toString()
}
});
Und hier ist der PHP Rückruf:
function save_new_img_order( $post ) {
global $wpdb;
$pid = $post->ID;
$order = explode( ',', $_POST[ 'item_order' ] );
$counter = 0;
foreach ( $order as $item_id ) {
$wpdb->update( $wpdb->posts, array( 'menu_order' => $counter,
'post_parent' => $pid,
), array( 'ID' => $item_id ) );
$counter ++;
}
die( 1 );
}
add_action( 'wp_ajax_new_item_save', 'save_new_img_order' );
Es ist eine alte Frage, die andere gerne beantworten würden
Führen Sie dies in einer mit wp_ajax verknüpften Ajax-Funktion aus.
$url = wp_get_referer();
$post_id = url_to_postid( $url );
Der Ajax-Hook gibt kein $post
-Objekt an Ihren Rückruf zurück - wie um alles in der Welt würde er das wissen!
Sie müssen die Daten selbst senden:
data:{
action: 'new_item_save',
post_id: POST_ID_EITHER_PARSED_FROM_DOM_OR_PHP_ECHOED,
item_order: $('#img-sortable').sortable('toArray').toString()
}
... und nimm es dann von $_POST
in deinem Handler:
function save_new_img_order() {
$post_id = $_POST['post_id'];
...
}