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


10

皆さん、こんにちは。WordPress3.0と、カスタム投稿タイプメニューエディターの 2つの新機能をいじっています。

products想像のとおり、私は「」という新しい投稿タイプを作成することから始めました。

私は沼地の標準テンプレートを使用しており、上部のナビゲーションを置き換える新しいメニューを作成しています。特定の「製品」しか追加できないことがわかる限り、製品「アーカイブ」を追加することはできません。私がやろうとしていることは、メニューにリンクを追加して、すべての製品をリストするページに移動することです。

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

回答:


12

@dottyこのtracチケットを見るとわかるように、カスタム投稿タイプのインデックスページがあるはずなので、WordPressコアではまだそのニーズに対応していません。

@John P Blochと@Chris_Oはどちらも優れた代替手段を提供します。3位にしましょう。

「製品」ページ

まず、カスタム投稿タイプのページを作成し、それを"Products"と呼びます。これにより、次のURLが提供されます。

http://example.php/products/

「製品リスト」ショートコード

次に、「製品」ページに埋め込むことができるショートコードを作成します。私の例では、それを呼び出しました。これを使用した場合のスクリーンショットを次に示します。[product-list]

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. [ メニューを作成]ボタンをクリックします(スクリーンショットは[メニューを保存]を示していますが、追加すると[メニューを作成]になります)。
  5. 新しいメニューを「プライマリナビゲーション」として選択します。
  6. 「製品」ページを選択します。
  7. 「メニューに追加」をクリックします
  8. 「保存メニュー」をクリックします

WordPressサイトへの製品ページメニューオプションの追加
(ソース:mikeschinkel.com

最後に、出力

基本的な製品リストは次のようになります。

WordPressのカスタム投稿タイプを使用する製品のリスト
(ソース:mikeschinkel.com


残っている質問は、すべての製品のサブメニューを提供するように製品メニューエントリを変更する方法です。
hakre

@harke更新されました。
MikeSchinkel、2010

まあそれは要求ではなかった:)。ドロップダウンがどのように自動的に作成されるのか疑問に思っていましたが、それでもまだ役に立ちません。しかし、書かれているように、それは要求ではありません
hakre

こんにちは、私はこれに問題があり、あなたが助けてくれることを願っています。問題はあるcurrent-menu-itemに適用されていないクラスの製品 "li
Reigel

画像がありません。:/
fuxia

4

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

これにより、パーマリンクをカスタマイズするための追加フィールド(ブログ投稿の場合と同様)が提供され、カテゴリー、著者、月、年、投稿タイプなどに基づいてパーマリンクをカスタマイズできるようになります。


ここにいくつかの素晴らしい情報をありがとう。私は同じことを探していますが、書き換えですべてが正常に機能していますが、カスタムリンクをメニューに追加すると、パブリックWebサイトが、訪問者がそのページにいることを示すCSSを変更しないように見えるので行き詰まります。「製品」アーカイブ内にある場合に、メニュー項目を「オン」状態で表示できるように、この方法を教えてください。
NetConstructor.com 2010年

0
特定の「製品」しか追加できないことがわかる限り、製品の「アーカイブ」を追加することはできません。私がやろうとしていることは、メニューにリンクを追加して、すべての製品をリストするページに移動することです。これを行う方法はありますか?

"products"投稿タイプに分類法を割り当ててから、カスタム用語の1つに分類法用語を追加すると、ユーザーは使用される分類法の下にあるすべての製品のアーカイブページに移動します。

「ジョブ」というカスタム投稿タイプがあり、「ポジション」というラベルの付いた分類法があります。 代替テキスト

"Current Openings"分類用語のすべての求人が必要な場合は、それを選択してメニューに追加します。 代替テキスト

すべての「製品」投稿タイプをアーカイブページに配置する必要がある場合は、それらすべてに親分類を割り当てて、すべてアーカイブページにリストできるようにすることができます。


@Chris_O:これは1つの方法ですが、唯一の方法ではなく、ユーザーによる分類を維持するためにかなりの労力が必要です。とにかくJMTCW。
MikeSchinkel、2010

理にかなっています。うまくいけば、カスタム投稿タイプのインデックスページはコアで扱われるでしょう。
Chris_O 2010

0

私は、カスタムポストタイプを介してポストタイプアーカイブを作成し、アーカイブされた投稿をこのアーカイブに移動する方が良いソリューションだと思います。また、これを元に戻すには、この新しいpost_typeのpostmetaに現在のpost_typeを追加します。私はこれのプラグインを書いており、現在、スタイルシート、画像、言語ファイルなしでgist.github / 978690でこれを見ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.