私は私が投稿タイプを別の投稿タイプの子になるように割り当てたカスタム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' );
しかし、その古い質問は他の人のために答えたいと思います
Wp_ajaxにフックされたajax関数内でこれを行います。
$url = wp_get_referer();
$post_id = url_to_postid( $url );
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'];
...
}