web-dev-qa-db-ja.com

Wp_ajax関数でpost_idを取得する

私は私が投稿タイプを別の投稿タイプの子になるように割り当てたカスタムAJAX関数を書きました。ある機能では、私はそれらの子投稿をループしていて、post_parent(子投稿が属する投稿)を反映するようにデータベースを更新したいと思います。

問題は、その投稿のIDをどこからでも取得してdbを更新することができないことです。助言がありますか?

これがjQuery関数です。

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

    }
});

そしてこれが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' );
2
janedit

しかし、その古い質問は他の人のために答えたいと思います

Wp_ajaxにフックされたajax関数内でこれを行います。

$url     = wp_get_referer();
$post_id = url_to_postid( $url ); 
9
Sayed Taqui

Ajaxフックは$postオブジェクトをあなたのコールバックに返しません - それがどうやってそれをするのを知っているでしょう!

データを自分で送信する必要があります。

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

...そしてハンドラーの$_POSTから取得します。

function save_new_img_order() {
    $post_id = $_POST['post_id'];
    ...
}
2
TheDeadMedic