web-dev-qa-db-ja.com

カスタムpost_typeへのスティッキポストを有効にする

私はこのカスタムpost_typeがあります:tvr_apartment

function custom_post_apartment() {
        $labels = array(
            'name'                => 'Apartments',
            'singular_name'       => 'Apartment',
            'add_new'             => 'Add New',
            'add_new_item'        => 'Add New Apartment',
            'edit_item'           => 'Edit Apartment',
            'new_item'            => 'New Apartment',
            'all_items'           => 'All Apartments',
            'view_item'           => 'View Apartment',
            'search_items'        => 'Search Apartments',
            'not_found'           => 'No apartments found',
            'not_found_in_trash'  => 'No apartments found in trash',
            'parent_item_colon'   => '',
            'menu_name'           => 'Apartments'
        );

        $args = array(
            'labels' => $labels,
            'public' => true,
            'query_var' => true,
            'rewrite' => true,
            'capability_type' => 'post',
            'has_archive' => true,
            'hierarchical' => false,
            'menu_position' => null,
            'taxonomies' => array('rf_apartment_feature'),
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt' )
        );

        register_post_type( 'tvr_apartment', $args );
    }

それにsticky post機能を有効にしたいです。

enter image description here

私はここで検索しました: http://codex.wordpress.org/Function_Reference/post_type_supports

しかし、私はそれが行く方法ではないようです、任意のアイデア?

4

広範囲で長期にわたるTracチケットによると #12702 、カスタム投稿タイプはスティッキー機能をサポートしていません(そしておそらくサポートしないでしょう)。

カスタムサイトでCPTのためにそれを再利用することは不可能ではないかもしれません(コピーペーストとEdgeケースを大量に使う)が、私の意見ではカスタムソリューション(おそらくカスタムフィールドベース)はより実用的でクリーンなアプローチでしょう。

5
Rarst

私は以下のものをうまく動作させることができました。あなたがそれを使うべきかどうか決めることができるように、私はテクニックを説明しましょう。

  1. コードは2つのフックを使用します。1つは "side"メタボックスが配置される直前に発生し、もう1つはpublishメタボックスの "date/time"セクションの直後に発生します。

  2. 最初のフック(before)はオリジナルの投稿タイプを記録し、それを "post"に切り替えると、wordpressはそれが投稿であると判断し、 "post"投稿タイプに固有のデフォルトフィールドを設定します。

  3. 2番目のフック(after)は投稿タイプを元のものにリセットします。

誰かが何か問題に遭遇したり、このテクニックが失敗するかもしれない予期しないユースケースを思い付くことができるならば、返事をしてください。

// see /wp-admin/edit-form-advanced.php .. since wp 2.5.0
add_action( 'submitpost_box', function() {
    // fyi .. unable to use "post_submitbox_minor_actions" action (/wp-admin/includes/meta-boxes.php) because $post_type is set early
    global $post;
    if ( isset( $post->post_type ) && in_array( $post->post_type, array( 'post_type_1', 'post_type_2' ) ) ) {
        echo 'before'; // debug
        $post->post_type_original = $post->post_type;
        $post->post_type = 'post';
    }
} );

// see /wp-admin/includes/meta-boxes.php .. since wp 2.9.0
add_action( 'post_submitbox_misc_actions', function() {
    global $post;
    if ( isset( $post->post_type_original ) && in_array( $post->post_type_original, array( 'post_type_1', 'post_type_2' ) ) ) {
        echo 'after'; // debug
        $post->post_type = $post->post_type_original;
        unset( $post->post_type_original );
    }
} );

注: 上記のオプションはUIにオプションを追加するためのものです。あなたはまだあなたのtemplates/outputの中にスティッキポストをチェックして作業する必要があるでしょう。 ):

https://wordpress.stackexchange.com/a/185915/466

2
farinspace