Obtendo o post_id na função wp_ajax

2

Eu escrevi uma função AJAX personalizada na qual atribuí um tipo de postagem para ser filho de outro tipo de postagem. Em uma função estou circulando por meio desses posts filhos, e quero atualizar o banco de dados para refletir o post_parent (o post ao qual as postagens filho pertencem).

O problema é que não consigo pegar o ID desse post de qualquer lugar para atualizar o db. Alguma sugestão?

Aqui está a função jQuery:

$.ajax({
    url: ajaxurl,
    type: 'POST',
    async: true,
    cache: false,
    dataType: 'json',
    data: {
        action: 'new_item_save',
        item_order: $('#img-sortable').sortable('toArray').toString()

    }
});

E aqui está o retorno de chamada do PHP:

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' );
    
por janedit 25.07.2012 / 14:21

2 respostas

7

É uma questão antiga, no entanto, gostaria de responder por outras pessoas

Dentro da função ajax conectada ao wp_ajax, faça isso.

$url     = wp_get_referer();
$post_id = url_to_postid( $url ); 
    
por Sayed Taqui 05.02.2015 / 19:22
2

O gancho ajax não repassará um objeto $post para seu retorno de chamada - como ele saberia fazer isso!

Você precisa enviar os dados por conta própria:

data:{
    action: 'new_item_save',
    post_id: POST_ID_EITHER_PARSED_FROM_DOM_OR_PHP_ECHOED,
    item_order: $('#img-sortable').sortable('toArray').toString()
}

... e, em seguida, pegue-o em $_POST no seu manipulador:

function save_new_img_order() {
    $post_id = $_POST['post_id'];
    ...
}
    
por TheDeadMedic 25.07.2012 / 14:54