ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

WordPress5.3, 投稿タイプで特定機能をサポートする設定

wordpress image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

add_post_type_support()のパラメータが変わり、高機能パラメータを指定できるようになりました。

何が変わったのかソースコードまで読んだんですが、本筋以外でも気になるところがあって、PHPのプログラミングとして『そんなことしていいの?』と思っちゃった。

開発者向けの話です。テーマ・プラグインを作っている人は要チェック。

add_post_type_support()は何?

投稿記事(post)にはある機能やその編集画面にある機能を、固定ページやカスタム投稿タイプにも使いたいときに設定する関数です。

たとえば、固定ページにサムネイル(アイキャッチ画像)と抜粋、コメント欄を追加するサンプルです。

(固定ページにはサムネイル、抜粋、コメント欄が表示されないと想定)

<?php

function my_custom_init() {
    add_post_type_support( 'page', [ 'thumbnail', 'excerpt', 'comments' ] );
}
add_action('init', 'my_custom_init');

高機能なカスタム機能は消えていたらしい

これまで、カスタム機能のパラメータを渡しても消えていたらしいです。

<?php

add_post_type_support( 'my_post_type', [
    'custom_feature' => [
        'setting-1' => 'value',
        'setting-2' => 'value',
    ] ]
);

そうなの? と思ってしまいました。たとえば、固定ページにJetpackプラグインのSNS自動投稿を追加するときはできていたはずなのに。

固定ページにSNS投稿機能追加
<?php

add_post_type_support( 'page', 'publicize' );

もう1回、公式ガイドを読み返してみると、どうやら多次元配列(高機能なパラメータ)が消されてたみたいです。

使ったことないので見落としてました。

register_post_type()が多次元配列に対応

add_post_type_support()は最終的にregister_post_type()のパラメータsupportsに入って実行します。

そのregister_post_type()のsupportsが多次元配列に対応しました。

<?php

register_post_type(
    'my_post_type', [
        // ...
        'supports' => [
            'title',
            'editor',
            'custom_feature' => [
                'setting-1' => 'value',
                'setting-2' => 'value',
            ],
        ],
        // ...
    ]
);

気になること

そもそもこんなパラメータ指定できたの? と思っちゃいました。

<?php

add_post_type_support( 'my_post_type', [
    'custom_feature' => [
        'setting-1' => 'value',
        'setting-2' => 'value',
    ] ]
);

add_post_type_support()のコードの中身です。

wp-includes/post.php (WP5.2まで)
function add_post_type_support( $post_type, $feature ) {
    global $_wp_post_type_features;

    $features = (array) $feature;
    foreach ( $features as $feature ) {
        if ( func_num_args() == 2 ) {
            $_wp_post_type_features[ $post_type ][ $feature ] = true;
        } else {
            $_wp_post_type_features[ $post_type ][ $feature ] = array_slice( func_get_args(), 2 );
        }
    }
}

すごいデータのぶっ込み方ですね。配列のキー($feature)に配列をぶっ込んでます。

そしてこのコードのスゴイところは、想定していない第3パラメータ以降で高機能パラメータをぶっ込んでます。

(array_slice()のところ。)

正しいパラメータ指定

WP5.3ではadd_post_type_support()のコードはこうなってます。

wp-includes/post.php(WP5.3)
<?php

function add_post_type_support( $post_type, $feature, ...$args ) {
    global $_wp_post_type_features;
 
    $features = (array) $feature;
    foreach ( $features as $feature ) {
        if ( $args ) {
            $_wp_post_type_features[ $post_type ][ $feature ] = $args;
        } else {
            $_wp_post_type_features[ $post_type ][ $feature ] = true;
        }
    }
}

高機能なパラメータが指定できるように可変長パラメータになってます。(...$args)

そうなると正解はこうなんじゃないかな?

<?php

add_post_type_support( 'my_post_type', 'custom_feature', [
    'setting-1' => 'value',
    'setting-2' => 'value', ]
);
前の投稿
WordPress5.3, ナビゲーションメニューで整数のスラッグは使えない
WordPress5.3 script, styleタグのtype属性を消す方法
次の投稿

WordPressの本

post-cta-image

たくさんあるなかで、WordPressの基本が学べる、目的別に学べる本を選びました。

  • WordPressの基本。
  • Webサイト作成から運用まで全体的に学ぶ。
  • かんたんなカスタマイズを学ぶ。
  • 何も分からないところから学ぶ。
  • WordPressからPHPプログラミングを学ぶ。

の5冊です。どうしてもネット上で調べて勉強するのが苦手という人におすすめです。

この内容をモノにすればほかの本は必要ありません。あとは自分の力で、書籍を使わずにインターネット上にある情報だけで学んでいけます。

コメントを残す

*