web-dev-qa-db-ja.com

サポートなしでカスタム投稿タイプのタイトルを設定する方法

それで、私は別のスレッドでこの質問を異なった方法で尋ねました、しかしそれはアドバイスタイプの質問のより多くだったのでそれは本当にどんな有用な応答もしませんでした。私はそれをより良い言葉にすることができ、私が成し遂げようとしていることを何人かの人が解読し、解決策に協力したら他の人を助けることができると信じています。

カスタム投稿タイプにはメタボックスの値しか必要ないため、非常に限られたSupports( ここで説明されている )値を使用しているカスタム投稿タイプがあります。私のタイプにタイトルとコンテンツを含めることは意味がありません。以下のコード

register_post_type( 'athlete',
        array(
            'labels' => array(
                'name' => 'Athletes',
                'singular_name' => 'Athlete',
                'add_new' => 'Add New',
                'add_new_item' => 'Add New Athlete',
                'edit' => 'Edit',
                'edit_item' => 'Edit Athlete',
                'new_item' => 'New Athlete',
                'view' => 'View',
                'view_item' => 'View Athlete',
                'search_items' => 'Search Athletes',
                'not_found' => 'No Athletes found',
                'not_found_in_trash' => 'No Athletes found in Trash',
                'parent' => 'Parent Athlete'
            ),

            'public' => true,
            'menu_position' => 15,
            'supports' => array( 'thumbnail' ),
            'taxonomies' => array( '' ),
            'has_archive' => true
        )
    );

ご覧のとおり、残りの投稿タイプはメタボックスになるため、サムネイルサポートオプションのみが必要です(この質問には含まれていません)。問題は、競技者を保存するときに2つの問題があることです。自分のメタボックスの値を競技者リストに(グリッドの列として)表示する方法がわからず、Titleの値を次のように設定する方法がわかりません。常に "自動生成"に設定されていますが、これはお勧めできません。 Titleが検索可能なフィールドになる場合は、値を[First Name] + [Last Name]に設定します。カスタムデータベーステーブルとカスタムUIを使用してオブジェクトを管理するのではなく、カスタム投稿タイプを使用して問題に遭遇するかどうかを説明してくれる人はいますか。

4
clockwiseq

私もこれに手を出した。メタボックスには、 Meta Box プラグイン(私は定期的にコードを提供しています)をお勧めします。使い方の良いチュートリアルは here です。カスタム列の場合は、WPSEで検索を実行しますが、 this を使用すると開始できます。投稿のタイトルを保存するには、save_postフィルタを使用します。メタボックスを設定するときは、姓名に使用したIDを覚えておいてから、次のコードで置き換えます。

add_filter( 'save_post_athlete', 'wpse88655_set_title', 10, 3 );
function wpse88655_set_title ( $post_id, $post, $update ){
    //This temporarily removes filter to prevent infinite loops
    remove_filter( 'save_post_athlete', __FUNCTION__ );

    //get first and last name meta
    $first = get_metadata( 'athelete_first_name', $post_id ); //meta for first name
    $last = get_metadata( 'athelete_last_name', $post_id );   //meta for last name

    $title = $first . ' ' . $last;

    //update title
    wp_update_post( array( 'ID'=>$post_id, 'post_title'=>$title ) );

    //redo filter
    add_filter( 'save_post_athlete', __FUNCTION__, 10, 3 );
}
3
Manny Fleurmond