web-dev-qa-db-ja.com

カスタム投稿タイプにカスタムフィールドを追加する方法

それで、私はいくつかのカスタム投稿タイプといくつかの分類法を登録しました。今、私の人生のために、私は私のカスタム投稿タイプにカスタムフィールドを追加するために必要なコードを把握することはできません。

ドロップダウンと単一行のテキスト領域が必要です。ただし、投稿の種類ごとに別のフィールドも必要です。したがって、投稿タイプ1に3つのフィールドがあり、投稿タイプ2に4つのフィールドがあるとしますが、フィールドは異なります。

どんなヒントでもコーデックスを見て何かを見つけたには役立ちますが、functions.phpファイルに追加する必要があるものを理解することはできません

17
xLRDxREVENGEx

これはおそらくあなたが思うよりももっと複雑です、私はフレームワークを使うことになるでしょう:

あなたがあなた自身のものを書きたいなら、ここにいくつかのまともなチュートリアルがあります:

16
Wyck

カスタム投稿タイプの投稿編集画面にregister_post_typeを含めるには、(custom-fieldsの使用中に)supports引数を追加/編集します。

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

ソース: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields

22
kubante

検証を追加する必要があるはずですが、この操作は現在のバージョンのWordPressにとって複雑ではないようです。

基本的に、カスタム投稿タイプにカスタムフィールドを追加するには2つの手順が必要です。

  1. カスタムフィールドを保持するメタボックスを作成する
  2. カスタムフィールドをデータベースに保存します

これらのステップはここでグローバルに説明されています: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

例:

「機能」というカスタムフィールドを「prefix-teammembers」というカスタム投稿タイプに追加します。

まずメタボックスを追加します。

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

「prefix-teammembers」を追加または編集すると、add_meta_boxes_{custom_post_type}フックがトリガーされます。 add_meta_box()関数については http://codex.wordpress.org/Function_Reference/add_meta_box を参照してください。上記のadd_meta_box()の呼び出しでは、フォームフィールドを追加するためのコールバックであるprefix_teammembers_metaboxes_htmlです。

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

2番目のステップでは、データベースへのカスタムフィールドがあります。 save_post_{custom_post_type}フックを保存するとトリガーされます(v 3.7以降、 https://stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts を参照)。これをフックしてカスタムフィールドを保存することができます。

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   
6
Bass Jobsen

カスタムメタボックスとカスタムフィールドにはさまざまなプラグインがあります。開発者向けのプラグインを見ているのなら、 Meta Box を試してみてください。軽量で非常に強力です。

メタボックス/カスタムフィールドのコードの書き方についてのチュートリアルを探しているなら、 this が良いスタートです。これは、拡張を容易にするためにコードを洗練するのに役立つ可能性があるシリーズの最初の部分です。

1
Anh Tran