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


18

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

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

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


回答:


19

これはおそらくあなたが考えるよりも複雑です。フレームワークの使用を検討します。

独自のを作成する場合、ここにいくつかの適切なチュートリアルがあります。


1
本当にそれは難しいでしょう。投稿タイプや分類法のように、関数にレジスタコードを追加するのと同じくらい簡単だと思いました。
xLRDxREVENGEx

1
この回答に1つ加えますが、それほど複雑ではありません。thinkvitamin.comリンクは、メタボックスを追加して保存する方法を説明する素晴らしい仕事をしています。sltaylor.co.ukリンクは、優れたコーディングプラクティスの使用に関するすばらしいチュートリアルです。save_postフックを使用するときは注意してください。変な時に呼び出されます。WP_DEBUG変数をtrueに設定して、使用時に発生する可能性のあるエラーを確認してください。
トールマンズ

1
更新だけでthinkvitaminリンクを使用しました。これは非常に役立ち、カスタムフィールドの設定に関する
簡単な説明でした-xLRDxREVENGEx

25

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

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

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


2
これで問題が解決する理由を説明してください。
s_ha_dum

1
はい、これは動作します。誰が答えを-1しました。取り戻せますか?よろしく、
ジュネイドカディール

6
...その後.........?
マーク

9

検証を追加する必要がありますが、このアクションは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」というカスタムフィールドを追加します。

最初にメタボックスを追加します。

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}フックがトリガーされます。関数については、http://codex.wordpress.org/Function_Reference/add_meta_boxを参照して くださいadd_meta_box()。上記のadd_meta_box()isの呼び出しでは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' );   

「なぜ、prefix_teammembers_save_postは新規追加によってトリガーされるのですか?」あなたは答えを見つけましたか、私は思い出せない余分な機能トリガーにもつまずいていますか?
アレックス

「「function」というカスタムフィールドを「prefix-teammembers」というカスタム投稿タイプに追加します。」「called」とはどういう意味ですか?名前?singular_name?ラベル?register_post_typeの最初の引数として使用される文字列機能または多分それが一貫だとして何であるかは重要ではありません。。
arnoldbird

1

カスタムメタボックスおよびカスタムフィールド用のさまざまなプラグインがあります。開発者に焦点を当てたプラグインを見る場合は、Meta Boxを試してください。軽量で非常に強力です。

メタボックス/カスタムフィールドのコードの書き方に関するチュートリアルを探しているなら、これは良い出発点です。これは、コードを改良して拡張しやすくするのに役立つシリーズの最初の部分です。


-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

完全な知識

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.