コンテンツにスキップ

WordPress のカスタムフィールドのリビジョン機能を試す

メインイメージ

WordPress におけるカスタムフィールド(ポストメタ)のリビジョン機能を試しました。

カスタムフィールドのリビジョン機能は WordPress 6.4 ( 2024 年 11 月リリース)で追加されました。 デフォルトではフットノート(脚注)機能についてのみ有効となっていますが、将来的にはアイキャッチ画像( Featured Images )にも使われる予定になっているそうです。

リビジョン機能の有効化するにはカスタムフィールドを登録するときに revisions_enabledtrue にセットすれば OK です。

add_action( 'init', function () {

// book-genre フィールド: リビジョン機能を有効にする
register_meta(
    'post',
    'book-genre',
    [
        'show_in_rest' => true,
        'single' => true,
        'type' => 'string',
        'default' => 'Default text field',
        'revisions_enabled' => true,
    ]
);

} );

カスタムフィールドがプラグインなど外部で登録されているものの場合は、 wp_post_revisions_meta_keys というフィルターフックを利用すれば OK です。

// `my_product_price` というカスタムフィールドでリビジョンを有効にする
function enable_revisions_for_product_price_field( $revisioned_keys ) {
    if ( ! in_array( 'my_product_price', $revisioned_keys, true ) ) {
        $revisioned_keys[] = 'my_product_price';
    }
    return $revisioned_keys;
}
add_filter( 'wp_post_revision_meta_keys', 'enable_revisions_for_product_price_field' );

動画

詳細は動画でご覧ください。

動画内で使用したコード

動画内で使用したコードをこちらに貼り付けておきます。 再現されたいときなどにお使いください。

カスタムフィールドでリビジョンを有効にする:

add_action( 'init', function () {

// book-genre フィールド: リビジョン機能を有効にする
register_meta(
    'post',
    'book-genre',
    [
        'show_in_rest' => true,
        'single' => true,
        'type' => 'string',
        'default' => 'Default text field',
        'revisions_enabled' => true,
    ]
);

// 比較用のbook-author フィールド: リビジョン機能を有効にしない
register_meta(
    'post',
    'book-author',
    [
        'show_in_rest' => true,
        'single' => true,
        'type' => 'string',
        'default' => 'Default text field',
    ]
);

} );

Block Bindings API を使ってカスタムフィールドを編集できる段落ブロックを作る:

1. book-genre:

<!-- wp:paragraph {
    "metadata":{
        "bindings":{
            "content":{
                "source":"core/post-meta",
                "args":{
                    "key":"book-genre"
                }
            }
        }
    }
} -->
<p></p>
<!-- /wp:paragraph -->

2. book-author:

<!-- wp:paragraph {
    "metadata":{
        "bindings":{
            "content":{
                "source":"core/post-meta",
                "args":{
                    "key":"book-author"
                }
            }
        }
    }
} -->
<p></p>
<!-- /wp:paragraph -->

参考にした記事は Make WordPress Core ブログの「 Framework for storing revisions of Post Meta in 6.4 」という記事です。

この記事ではカスタムフィールドのリビジョン機能を有効にする方法の他に、カスタムフィールドのリビジョン機能をさまざまなレベルで無効にする方法なども紹介されています。

カスタムフィールドのリビジョン機能を完全に無効化する:

remove_action( 'wp_after_insert_post', 'wp_save_post_revision_on_insert', 9, 3 );

自動保存でのカスタムフィールドの保存を無効にする:

remove_action( 'wp_creating_autosave', 'wp_autosave_post_revisioned_meta_fields' );

リビジョンと自動保存でのカスタムフィールドの保存を無効にする:

remove_action( 'wp_restore_post_revision', 'wp_restore_post_revision_meta', 10, 2 );

通常の保存だけでなく自動保存でもカスタムフィールドのリビジョンを残す設定だと wp_options テーブルが肥大化してパフォーマンスに悪影響を及ぼすこともありそうなので、このあたりは必要に応じて調整するのがよいかと思います。

確認時の WordPress のバージョン

  • WordPress 6.6

関連ページ