web-dev-qa-db-ja.com

WordPressのカスタム投稿タイプに `supports`配列を追加する

カスタム投稿タイプにsupportsパラメータを追加しようとしていますが、機能していないため、編集ページが空白になります。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'my_campaigns',
    array(
      'labels' => array(
        'name' => __( 'Campaigns' ),
        'singular_name' => __( 'Campaign' )
      ),
      'supports' => array(
         'title' => true,
         'editor' => true,
         'thumbnail' => true ),
    )
  );
}
1
Aziz

'supports' => [ 'title', 'editor', 'thumbnail' ] - キーではなく異なる値を使用してください。

register_post_type()を調べると、次の行が見つかります。

if ( ! empty( $args->supports ) ) {
    add_post_type_support( $post_type, $args->supports );
    unset( $args->supports );
} elseif ( false !== $args->supports ) {
    // Add default features
    add_post_type_support( $post_type, array( 'title', 'editor' ) );
}

add_post_type_support()では、値がtrueという値を持つ配列キーに変換されることがわかります。

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 );
    }
}

register_post_type()はちょうど2つの引数でadd_post_type_support()を呼び出しているので、後者の関数のelseには到達できません。

ただし、add_post_type_support()を直接呼び出してカスタムサポート機能を渡すことはできます。

add_post_type_support(
    'my_campaigns',
    'subheadline',
    [
        'min_length' => 30,
        'max_length' => 300,
    ]
);

しかし、それからあなたは別々にそれぞれの機能のために関数を呼ばなければなりません。

注意:'name' => __( 'Campaigns' )は使用しないでください。テキストドメインがないと、この文字列はまったく翻訳できませんが、WordPressのデフォルトの翻訳の検索を引き起こします。詳しくは あなたのプラグインを国際化する方法 をご覧ください。

2
fuxia