やあ、WordPress 3.0と2つの新機能、 カスタム投稿タイプ と メニューエディタ で遊んでいる。
私はあなたが推測したように、 "products
"と呼ばれる新しい投稿タイプを作成することから始めました。
私は沼地の標準的なテンプレートを使っていて、トップナビゲーションを置き換えるために新しいメニューを作成しています。私が見ることができる限り、私は特定の "products" しか追加できませんが、 "archive" を追加することはできません。私がやろうとしているのは、すべての商品を一覧表示するページに移動するためのメニューへのリンクを追加することです。
これを行う方法がありますか?
@dotty このTracチケットでわかるように: カスタム投稿タイプのインデックスページがあるはずです 明らかにその必要性はまだ扱われていませんWordPressのコア.
@ John P Blochと@Chris_Oの両方があなたに良い選択肢を与えます。私はあなたに3番目をあげるつもりです。
まず、カスタム投稿タイプにPageを作成し、"Products"という名前を付けます。それはそれに次のURLを与えるでしょう:
次に"Products"ページに埋め込むことができる Shortcode を作成します。私の例では、私はそれを[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 )
これは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/が製品のリストとして表示されます。そこから、あなたはあなたのメニューにカスタムリンクを追加するだけです。
ただし、フィードを使って(月、年などで)真のアーカイブを作成する場合は、さらに詳細なコードが必要です。あなたの 'products'が非階層型の投稿タイプの場合(そうであるように思われる)、あなたは私のプラグインを使うことができます。
http://www.wordpress.org/extend/plugins/custom-post-permalinks/ /
それはあなたがあなたのパーマリンクをカスタマイズするためのあなたに追加のフィールドを与えます(あなたがブログの投稿でできるように)、そしてあなたにカテゴリ、作者、月、年、投稿タイプなどに基づいてパーマリンクをカスタマイズする能力を与える.
私は、カスタム投稿タイプで投稿タイプArchiveを作成し、このアーカイブ内でアーカイブ済み投稿を移動することがより良い解決策だと思います。また、この元に戻すには、現在のpost_typeをこの新しいpost_typeのpostmetaに追加します。私はこれのためのプラグインを書きましたそして現在のあなたは Gist.github/978690 で、スタイルシート、画像と言語ファイルなしでこれを見ることができます。
私が見ることができる限り、私はそれに特定の "製品"を追加することしかできません、私は製品の "アーカイブ"を追加することはできません。私がやろうとしているのは、すべての商品を一覧表示するページに移動するためのメニューへのリンクを追加することです。これを行う方法がありますか?
「商品」の投稿タイプに分類法を割り当て、カスタムメニューの1つに分類法の用語を追加すると、使用されている分類法の下にあるすべての商品のアーカイブページに移動できます。
例 "ポジション"という分類が付いた "ジョブ"というカスタム投稿タイプがあります。
「現在の開口部」という分類用語を使用してすべての求人を希望する場合は、それを選択してメニューに追加します。
すべての "商品"投稿タイプをアーカイブページに表示する必要がある場合は、それらすべてに親分類法を割り当てて、すべてがアーカイブページに表示されるようにすることができます。