web-dev-qa-db-de.com

Abrufen der post_id in der Funktion wp_ajax

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' );
2
janedit

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 ); 
9
Sayed Taqui

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'];
    ...
}
2
TheDeadMedic