回答:
@dottyこのtracチケットを見るとわかるように、カスタム投稿タイプのインデックスページがあるはずなので、WordPressコアではまだそのニーズに対応していません。
@John P Blochと@Chris_Oはどちらも優れた代替手段を提供します。3位にしましょう。
まず、カスタム投稿タイプのページを作成し、それを"Products"と呼びます。これにより、次のURLが提供されます。
次に、「製品」ページに埋め込むことができるショートコードを作成します。私の例では、それを呼び出しました。これを使用した場合のスクリーンショットを次に示します。[product-list]
(ソース:mikeschinkel.com)
このようなショートコードは、多くのオプション機能を追加し、さまざまな種類の投稿で機能するための優れた候補ですが、わかりやすくするために、すべてをハードコードしました。もちろん、これを独自のショートコードの開始点として使用できます。
<?php
add_shortcode('product-list', 'my_product_list');
function my_product_list($args) {
$save_post = $GLOBALS['post']; // Save state so you can restore later
$post_type = 'product';
$template_file = get_stylesheet_directory() . "/post-{$post_type}.php";
if (!file_exists($template_file)) {
return "<p>Missing template [$template_file].</p>";
} else {
global $post;
$q = new WP_Query("showposts=10&post_type={$post_type}&orderby=title&order=ASC");
$rows = array();
$rows[] = '<div class="post-list ' . $post_type . '-post-list">';
global $post_list_data;
$post_list_data = array();
$post_list_data['post_count'] = $post_count = count($q->posts);
foreach ($q->posts as $post) {
$q->the_post();
ob_start();
include($template_file);
$rows[] = ob_get_clean();
}
$rows[] = '</div>';
$GLOBALS['post'] = $save_post;
return implode("\n",$rows);
}
}
post-product.php
テーマテンプレートファイル次に、1つの製品のみを表示するテーマテンプレートファイルを作成する必要があります。ショートコードを実装する関数はテンプレートファイルに名前を付けます。post-product.php
これが良い出発点です。
<?php
/**
* post-product.php - File to display only one product within a list of products.
*/
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="entry-title"><?php the_title(); ?></h2>
<div class="entry-content">
<?php the_content(); ?>
</div>
</div>
最後に、メニューオプションを追加します。このスクリーンショットからわかるように、これは非常に簡単です(以下では、以前にWordPress 3.0メニューで何も実行したことがなく、Twenty TenなどのWordPress 3.0メニューをサポートするテーマを使用していることを前提としています)。
(ソース:mikeschinkel.com)
基本的な製品リストは次のようになります。
(ソース:mikeschinkel.com)
current-menu-item
に適用されていないクラスの製品 "li
これはWordPressでネイティブにサポートされていません。ただし、これをfunctions.phpファイルに追加すると機能します。
function give_me_a_list_of_products(){
add_rewrite_rule( 'products/?$', 'index.php?post_type=products', 'top' );
}
add_action( 'init', 'give_me_a_list_of_products' );
これにより、製品のリストとしてexample.com/products/が提供されます。そこから、メニューにカスタムリンクを追加するだけです。
ただし、フィードで真のアーカイブ(月、年など)が必要な場合は、より詳細なコードが必要です。「製品」が非階層的な投稿タイプの場合(そうであるように思われる)、私のプラグインを使用できます。
http://www.wordpress.org/extend/plugins/custom-post-permalinks/
これにより、パーマリンクをカスタマイズするための追加フィールド(ブログ投稿の場合と同様)が提供され、カテゴリー、著者、月、年、投稿タイプなどに基づいてパーマリンクをカスタマイズできるようになります。
特定の「製品」しか追加できないことがわかる限り、製品の「アーカイブ」を追加することはできません。私がやろうとしていることは、メニューにリンクを追加して、すべての製品をリストするページに移動することです。これを行う方法はありますか?
"products"投稿タイプに分類法を割り当ててから、カスタム用語の1つに分類法用語を追加すると、ユーザーは使用される分類法の下にあるすべての製品のアーカイブページに移動します。
例 「ジョブ」というカスタム投稿タイプがあり、「ポジション」というラベルの付いた分類法があります。
"Current Openings"分類用語のすべての求人が必要な場合は、それを選択してメニューに追加します。
すべての「製品」投稿タイプをアーカイブページに配置する必要がある場合は、それらすべてに親分類を割り当てて、すべてアーカイブページにリストできるようにすることができます。
私は、カスタムポストタイプを介してポストタイプアーカイブを作成し、アーカイブされた投稿をこのアーカイブに移動する方が良いソリューションだと思います。また、これを元に戻すには、この新しいpost_typeのpostmetaに現在のpost_typeを追加します。私はこれのプラグインを書いており、現在、スタイルシート、画像、言語ファイルなしでgist.github / 978690でこれを見ることができます。