bulk_edit_posts()
は、投稿一覧画面で複数投稿を選択して「一括編集」した際に呼び出される、バックエンド処理用の関数です。
投稿ステータス、カテゴリー、タグ、カスタムフィールド、カスタムタクソノミーなどを一括で更新する機能を処理します。通常は管理画面から呼ばれるもので、直接使うケースは少ないですが、処理のフックポイントとして活用できます。
目次
機能の説明
この関数は、WordPress の管理画面の投稿一覧で「一括編集」を行った時に送信されるデータ($_POST
)を処理し、指定された複数の投稿に対してデータを更新します。
主に以下の内容を更新できます:
- 投稿ステータス(公開 / 下書き など)
- カテゴリー / タグ
- 投稿者
- カスタムフィールド
- カスタムタクソノミー
- コメントの許可設定など
シンプルなコード例
以下のように、bulk_edit_posts()
は edit.php
のフォーム送信時に内部的に呼ばれます。
if ( isset( $_REQUEST['bulk_edit'] ) && isset( $_REQUEST['post'] ) ) {
bulk_edit_posts(); // 管理画面で自動的に呼び出される
}
通常は管理画面内の admin-ajax.php
や edit.php
で処理され、開発者が直接呼び出すことは稀です。
使い方の説明
基本的には自分で呼び出すことはなく、$_POST
や $_REQUEST
によって内部的に自動実行されますが、以下のように挙動を拡張したいときに便利です。
一括編集時にフックを追加する例
add_action( 'save_post', 'my_bulk_edit_save', 10, 2 );
function my_bulk_edit_save( $post_id, $post ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
if ( isset( $_REQUEST['bulk_edit'] ) ) {
// カスタムフィールドを一括更新など
update_post_meta( $post_id, 'my_meta_key', '新しい値' );
}
}
一緒に使うことが多い関連タグ・関数
save_post
投稿の保存時に処理を差し込むために頻繁に使います。
add_action( 'save_post', 'my_custom_save_action' );
admin_init
または current_screen()
一括編集時に条件を分岐させるために利用。
追加情報で取得したい場合
カスタムフィールドを一括編集対象にしたい場合、functions.php
等で編集用フィールドを追加して、保存時に save_post
フックで処理します。
add_action( 'bulk_edit_custom_box', 'my_bulk_edit_custom_field', 10, 2 );
この関数を利用してのカスタマイズ
カスタムフィールド price
を一括編集で更新
- 投稿一覧にカスタムフィールド入力欄を追加(JavaScript で)
bulk_edit_posts()
に連動してsave_post
フックで更新
function save_bulk_edit_price( $post_id ) {
if ( isset( $_REQUEST['bulk_edit'] ) && isset( $_REQUEST['price'] ) ) {
update_post_meta( $post_id, 'price', sanitize_text_field( $_REQUEST['price'] ) );
}
}
add_action( 'save_post', 'save_bulk_edit_price' );
想定されるトラブル
$_POST
に必要なパラメータが存在しない
一括編集用のフィールド名を間違えると、データが更新されないことがあります。
解決方法
JavaScript 側と PHP 側で、同じ名前のフィールド(例: name="price"
)を使うように統一しましょう。
Q&A
まとめ
bulk_edit_posts()
は WordPress 管理画面の投稿一覧で「一括編集」された時に使用される内部関数。- カテゴリー、ステータス、タグ、カスタムタクソノミーなど複数の投稿を一括編集可能。
- カスタムフィールドを処理したい場合は
save_post
などのフックを併用するのが基本。
コメント