web-dev-qa-db-ja.com

カスタム投稿タイプを一覧表示する方法

これが私のやりたいことです。

a)カスタム投稿タイプを作成し、「私のもの」というメニュー項目のパネルを作成します。

b) "My Stuff"はカテゴリのように動作しますが、メインブログには表示されません。それは「私のもの」の下にのみ表示されます。

それで、私は何をする必要がありますか?別のループを作成しますか?もしそうなら、2番目のループをどこに置きますか、そしてどのようにして "My Stuff"へのリンクを作成しますか?

あるいは、index.phpのループに "My Stuff"を追加し、 "My Stuff"カテゴリ(または分類法)を作成し、 "My Stuff"を何らかの方法でフィルタして、特定のフィールドが存在する場合にのみ表示されるようにします。

複雑な質問をおかけして申し訳ありませんが、これは非常に混乱を招くものです。このトピックで利用可能な散在するチュートリアルのいずれも、ページ上またはループ以外の場所にカスタム投稿タイプのコンテンツを表示する方法を明確に説明していません。

どうぞよろしくお願いします。

ありがとう。

2
user5486

a)カスタム投稿タイプを作成し、「私のもの」というメニュー項目のパネルを作成します。

簡単です。 Codex はあなたが知る必要があるすべてをあなたに教えてくれるはずです。

しかし、これは別の例です。

add_action( 'init', 'wpse_17863' );

/**
 * Creates a visible post type.
 *
 * Don’t forget to visit wp-admin/options-permalink.php once to refresh 
 * the rewrite rules!
 *
 * @return void
 */
function wpse_17863()
{
    $labels = array (
        // Usually plural.
        'name'               => 'Stuffies'
    ,   'singular_name'      => 'Stuffy'
    ,   'add_new'            => 'New Stuff'
    ,   'add_new_item'       => 'Add New Stuff'
    ,   'edit_item'          => 'Edit Stuffy'
    ,   'new_item'           => 'New Stuffy'
    ,   'view_item'          => 'View Stuffy'
    ,   'search_items'       => 'Search Stuffies'
    ,   'not_found'          => 'No Stuffies found'
    ,   'not_found_in_trash' => 'No Stuffies found in Trash'
    ,   'parent_item_colon'  => 'Parent Stuffy:'
    );

    register_post_type(
        'stuffy'
    ,   array (
            // visible
            'public'        => TRUE
            // Menu main name, usually plural
        ,   'label'         => 'Stuffies'
            // All labels
        ,   'labels'        => $labels
            // Menu position
            //   5 - below Posts
            //  10 - below Media
            //  15 - below Links
            //  20 - below Pages
            //  25 - below comments
            //  60 - below first separator
            //  65 - below Plugins
            //  70 - below Users
            //  75 - below Tools
            //  80 - below Settings
            // 100 - below second separator
        ,   'menu_position' => 5
            // permalinks
        ,   'rewrite' => array ( 'slug' => 'stuff' )
            // Create a default archive at /stuff/
        ,   'has_archive'   => TRUE
            // Allow child pages.
        ,   'hierarchical'  => TRUE
        // Add it to custom menus
        ,   'show_in_nav_menus'   => TRUE
        // Components of the editor.
        ,   'supports' => array (
                'editor'
            ,   'excerpt' 
            ,   'page-attributes'
            ,   'thumbnail'
            ,   'title'
             )
        // We use the built-in taxonomies too.
        ,   'taxonomies'          => array ( 'category', 'post_tag' )
        )
    );
}

b) "My Stuff"はカテゴリのように動作しますが、メインブログには表示されません。それは「私のもの」の下にのみ表示されます。

私はこの部分を理解していません。カスタム投稿タイプはuse分類法 - 私の例ではデモンストレーションのためにカテゴリとタグを追加しましたが、そうではありません。あなたは親子関係をページのようにタフに使うことができます。
あなたはあなたの質問の中でこの点を明確にしています私の答えを更新することができるかもしれません。

このトピックで利用可能な散在するチュートリアルのいずれも、ページ上またはループ以外の場所にカスタム投稿タイプのコンテンツを表示する方法を明確に説明していません。

パラメータ'has_archive'は、 やや新しい です。より古いチュートリアルはそれについて言及しないかもしれません。
テーマやプラグインであなたの新しいアーカイブにリンクするには get_post_type_archive_link( 'stuffy' ) を使ってください。

1
fuxia

私はちょうど同じようなことをしなければなりませんでした。私の解決策は、テンプレートのphpファイルを作成してから、そのテンプレートを使用するページを作成することでした。テンプレートには、ループを作成するためのWP_Queryがありました。

テンプレートファイルの先頭に:

<?php /* Template Name: <template name> */ ?>

そしてテンプレートファイルで:

$args=array('post_type' => 'my_stuff', 'posts_per_page' => 10);
$loop = new WP_Query( $args );
while ($loop->have_posts()) : $loop->the_post();

それから、ページを作成し、その属性でリストからテンプレート名を選択しました。

0
Chris