web-dev-qa-db-ja.com

WordPress 3.0のナビゲーションメニューに投稿のアーカイブを追加する

やあ、WordPress 3.0と2つの新機能、 カスタム投稿タイプ メニューエディタ で遊んでいる。

私はあなたが推測したように、 "products"と呼ばれる新しい投稿タイプを作成することから始めました。

私は沼地の標準的なテンプレートを使っていて、トップナビゲーションを置き換えるために新しいメニューを作成しています。私が見ることができる限り、私は特定の "products" しか追加できませんが、 "archive" を追加することはできません。私がやろうとしているのは、すべての商品を一覧表示するページに移動するためのメニューへのリンクを追加することです。

これを行う方法がありますか?

10
dotty

@dotty このTracチケットでわかるように: カスタム投稿タイプのインデックスページがあるはずです 明らかにその必要性はまだ扱われていませんWordPressのコア.

@ John P Blochと@Chris_Oの両方があなたに良い選択肢を与えます。私はあなたに3番目をあげるつもりです。

A "製品"ページ

まず、カスタム投稿タイプにPageを作成し、"Products"という名前を付けます。それはそれに次のURLを与えるでしょう:

http://example.php/products/ /

A "製品リスト"ショートコード

次に"Products"ページに埋め込むことができる Shortcode を作成します。私の例では、私はそれを[product-list]と呼びました。これがどのように使われるかのスクリーンショットです。

A Product's Page that uses a Shortcode to display a list of Products in WordPress 
(出典: 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のメニューをサポートするテーマを使用していると仮定します)。

  1. 管理者メニューのメニューオプションを選択します。
  2. "+" をクリックして新しいメニューを追加します。
  3. 好きな名前でメニュー名を入力してください。
  4. "Create Menu"ボタンをクリックします(スクリーンショットは"Save Menu"を示していますが、追加すると"Create Menu"になります)。
  5. 新しいメニューを"Primary Navigation"として選択します。
  6. "Products"ページを選択してください。
  7. クリック"メニューに追加"
  8. クリック"メニューを保存"

Adding a Products Page Menu Option to a WordPress Site 
(出典: mikeschinkel.com

最後に、出力

そして、これが基本的な製品リストがどのように見えるかです:

A List of Products using a Custom Post Type in WordPress 
(出典: mikeschinkel.com

12
MikeSchinkel

これは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/ /

それはあなたがあなたのパーマリンクをカスタマイズするためのあなたに追加のフィールドを与えます(あなたがブログの投稿でできるように)、そしてあなたにカテゴリ、作者、月、年、投稿タイプなどに基づいてパーマリンクをカスタマイズする能力を与える.

4
John P Bloch

私は、カスタム投稿タイプで投稿タイプArchiveを作成し、このアーカイブ内でアーカイブ済み投稿を移動することがより良い解決策だと思います。また、この元に戻すには、現在のpost_typeをこの新しいpost_typeのpostmetaに追加します。私はこれのためのプラグインを書きましたそして現在のあなたは Gist.github/978690 で、スタイルシート、画像と言語ファイルなしでこれを見ることができます。

0
bueltge
私が見ることができる限り、私はそれに特定の "製品"を追加することしかできません、私は製品の "アーカイブ"を追加することはできません。私がやろうとしているのは、すべての商品を一覧表示するページに移動するためのメニューへのリンクを追加することです。これを行う方法がありますか?

「商品」の投稿タイプに分類法を割り当て、カスタムメニューの1つに分類法の用語を追加すると、使用されている分類法の下にあるすべての商品のアーカイブページに移動できます。

"ポジション"という分類が付いた "ジョブ"というカスタム投稿タイプがあります。 alt text

「現在の開口部」という分類用語を使用してすべての求人を希望する場合は、それを選択してメニューに追加します。 alt text

すべての "商品"投稿タイプをアーカイブページに表示する必要がある場合は、それらすべてに親分類法を割り当てて、すべてがアーカイブページに表示されるようにすることができます。

0
Chris_O