0

私は現在ワードプレスのプラグインに取り組んでいます。プラグインには、投稿が作成、編集、または削除されるたびに、その投稿のデータで更新されるデータベース テーブルが含まれています。このテーブルの列の 1 つは「post_status」で、投稿のステータスが変更されるたびに更新する必要があります。今、私はこのコードを使用しています:

function filter_transition_post_status( $new_status, $old_status, $post ) { 
    global $post;
    global $wpdb;
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=$post->ID");
}
add_action('transition_post_status', 'filter_transition_post_status', 10, 3);

「投稿の編集」ページ内で投稿ステータスを変更すると、上記のコードは正常に機能します。投稿のステータスを変更すると、テーブルでも変更が発生します。ただし、「クイック編集」モードを使用して投稿のステータスを変更したり、複数の投稿を一括変更したりすると、コードが機能しません。私のテーブルでは変更は行われません。この問題を解決するための助けをいただければ幸いです。ありがとうございました

4

1 に答える 1

0

解決策を見つけました。「クイック編集」モードを使用して投稿を更新する場合、「投稿の編集」ページのようにグローバル $post を使用して投稿 ID を取得することはできませんが、$_GET['ID'] を使用します。したがって、「クイック編集」と「投稿の編集」の両方のオプションをカバーするために、以下の機能を使用しています。

function filter_transition_post_status( $new_status, $old_status, $post ) { 
    global $wpdb;
    global $post;
    $my_id = get_post($_GET['ID']);
    is_array($my_id) ? $post_id = $my_id[ID] : $post_id = $post->ID;
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=" .$post_id);
}
add_action('transition_post_status', 'filter_transition_post_status', 10, 3);

この関数は、$my_id が $_GET[ID] (「クイック編集」ページ) から何かを取得するかどうかをチェックし、取得する場合はそれを使用します。それ以外の場合は、グローバル $post を使用して ID を取得します。

アップデート:

スティーブン・ハリスよりもはるかに優れた解決策が得られました。

function wpse50651_filter_transition_post_status( $new_status, $old_status, $post ) { 

    global $wpdb;

    $wpdb->query( 
        $wpdb->prepare( 
          "UPDATE my_table SET post_status=%s WHERE post_id=%d", 
           $new_status,$post->ID
         ) 
     );
}
add_action('transition_post_status', 'wpse50651_filter_transition_post_status', 10, 3);
于 2012-05-01T04:08:41.670 に答える