Obtención del post_id en la función wp_ajax

2

Escribí una función AJAX personalizada en la que he asignado un tipo de publicación para que sea un hijo de otro tipo de publicación. En una función estoy haciendo un bucle a través de esas publicaciones secundarias, y quiero actualizar la base de datos para reflejar el post_parent (la publicación a la que pertenecen las publicaciones secundarias).

El problema es que no puedo capturar la ID de esa publicación desde cualquier lugar para actualizar la base de datos. ¿Alguna sugerencia?

Aquí está la función jQuery:

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

    }
});

Y aquí está la devolución de llamada de 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' );
    
pregunta janedit 25.07.2012 - 14:21

2 respuestas

7

Sin embargo, es una pregunta antigua que le gustaría responder por otras personas

Dentro de la función ajax enganchada a wp_ajax, haz esto.

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

El gancho ajax no devolverá un objeto $post a su devolución de llamada. ¡Cómo demonios sabría hacerlo!

Debe enviar los datos usted mismo:

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

... y luego tómalo de $_POST en tu controlador:

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

Lea otras preguntas en las etiquetas