Hinzufügen eines Archivs von Beiträgen zum Navigationsmenü in WordPress 3.0

10

Alles in allem spiele ich mit WordPress 3.0 und zwei (2) der neuen Funktionen, benutzerdefinierten Beitragstypen und dem Menü-Editor .

Ich habe damit begonnen, einen neuen Beitragstyp namens " products" zu erstellen , wie Sie vermutet haben, diese Liste Produkte.

Ich verwende die Moor-Standardvorlage und erstelle ein neues Menü, um das Top-Navi zu ersetzen. Soweit ich sehen kann, kann ich nur bestimmte "Produkte" hinzufügen, ich kann kein "Archiv" von Produkten hinzufügen . Ich versuche, einen Link zum Menü hinzuzufügen, um zu einer Seite zu gelangen, auf der ALLE Produkte aufgelistet sind.

Irgendeine Idee, wie das geht?

dotty
quelle

Antworten:

12

@dotty Wie Sie an diesem Trac-Ticket sehen können: Es sollten Indexseiten für benutzerdefinierte Beitragstypen vorhanden sein, damit der Bedarf im WordPress-Kern offensichtlich noch nicht behoben wurde.

Sowohl @John P Bloch als auch @Chris_O bieten Ihnen gute Alternativen. Ich werde dir einen dritten geben.

A „Produkte“ Seite

Erstellen Sie zunächst eine Seite für Ihren benutzerdefinierten Beitragstyp und nennen Sie sie "Produkte" . Das gibt ihm die folgende URL:

http: //example.php/products/

Ein Shortcode " Produktliste "

Erstellen Sie als Nächstes einen Shortcode , den Sie in Ihre Seite "Produkte" einbetten können . In meinem Beispiel habe ich es genannt [product-list]. Hier ist ein Screenshot, wie die Verwendung aussehen würde:

Eine Produktseite, die einen Shortcode verwendet, um eine Liste der Produkte in WordPress anzuzeigen
(Quelle: mikeschinkel.com )

Beachten Sie, dass ein solcher Shortcode ein großartiger Kandidat wäre, um viele optionale Funktionen hinzuzufügen und ihn für viele verschiedene Beitragstypen zu verwenden, aber im Interesse der Klarheit habe ich so ziemlich alles fest codiert. Sie können es natürlich als Ausgangspunkt für Ihren eigenen Shortcode verwenden:

<?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);
  }
}

Eine post-product.phpThemenvorlagendatei

Als Nächstes müssen Sie eine Designvorlagendatei erstellen, in der nur ein Produkt angezeigt wird. Die Funktion , die implementiert die Short Namen der Template - Datei post-product.phpund hier ist ein guter Ausgangspunkt:

<?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>

Fügen Sie die Menüoption hinzu

Zuletzt möchten Sie die Menüoption hinzufügen. Dies ist sehr einfach, wie Sie auf diesem Screenshot sehen können (im Folgenden wird davon ausgegangen, dass Sie zuvor noch nichts mit WordPress 3.0-Menüs gemacht haben und ein Thema verwenden, das WordPress 3.0-Menüs wie Twenty Ten unterstützt):

  1. Wählen Sie die Menüoption im Admin-Menü.
  2. Klicken Sie auf das " + " , um ein neues Menü hinzuzufügen.
  3. Geben Sie Ihren Menünamen ein, was auch immer Sie möchten.
  4. Klicken Sie auf die Schaltfläche "Menü erstellen" (der Screenshot zeigt "Menü speichern" , beim Hinzufügen wird jedoch "Menü erstellen" angezeigt .)
  5. Wählen Sie Ihr neues Menü als "Primäre Navigation" .
  6. Wählen Sie Ihre Seite "Produkte ".
  7. Klicken Sie auf "Zum Menü hinzufügen".
  8. Klicken Sie auf "Menü speichern".

Hinzufügen einer Menüoption für die Produktseite zu einer WordPress-Site
(Quelle: mikeschinkel.com )

Schließlich die Ausgabe

Und so könnte eine grundlegende Produktliste aussehen:

Eine Liste von Produkten, die einen benutzerdefinierten Beitragstyp in WordPress verwenden
(Quelle: mikeschinkel.com )

MikeSchinkel
quelle
Die ausgelassene Frage ist, wie der Menüeintrag für Produkte so geändert werden kann, dass ein Untermenü mit allen Produkten bereitgestellt wird.
hakre
@harke Aktualisiert.
MikeSchinkel
Nun, das war keine Anfrage :). Ich habe mich nur gefragt, wie das Dropdown-Menü automatisch erstellt wird, und ich denke, das nützt immer noch nichts. Aber wie geschrieben, ist das keine Anfrage.
hakre
Hallo, ich habe ein Problem damit und hoffe, Sie könnten helfen. Das Problem ist, dass current-menu-itemKlasse nicht auf Produkte angewendet wird 'li
Reigel
Fehlende Bilder. : /
Fuxia
4

Dies wird von WordPress nicht nativ unterstützt. Sie könnten dies jedoch zu Ihrer Datei functions.php hinzufügen und es würde funktionieren:

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' );

Dadurch erhalten Sie example.com/products/ als Liste der Produkte. Von dort aus fügen Sie einfach einen benutzerdefinierten Link zu Ihrem Menü hinzu.

Wenn Sie jedoch eine echte Archivierung (nach Monat, Jahr usw.) mit Feeds wünschen, benötigen Sie detaillierteren Code. Wenn Ihre 'Produkte' ein nicht hierarchischer Beitragstyp sind (wie es scheint), können Sie mein Plugin verwenden:

http://www.wordpress.org/extend/plugins/custom-post-permalinks/

Dadurch erhalten Sie zusätzliche Felder zum Anpassen Ihrer Permalinks (wie bei Blog-Posts) und können Permalinks basierend auf Kategorie, Autor, Monat, Jahr, Beitragstyp usw. anpassen.

John P Bloch
quelle
Vielen Dank für einige tolle Infos hier. Ich suche das Gleiche, aber obwohl beim Umschreiben alles gut funktioniert, stecke ich fest, denn wenn ich den benutzerdefinierten Link zum Menü hinzufüge, scheint die öffentliche Website das CSS nicht zu ändern, was darauf hinweist, dass sich ein Besucher auf dieser Seite befindet. Könnten Sie mir bitte mitteilen, wie dies gemacht wird, damit ich den Menüpunkt im Status "Ein" anzeigen kann, wenn Sie sich im Archiv "Produkte" befinden?
NetConstructor.com
0
Soweit ich sehen kann, kann ich nur bestimmte "Produkte" hinzufügen, ich kann kein "Archiv" von Produkten hinzufügen. Ich versuche, einen Link zum Menü hinzuzufügen, um zu einer Seite zu gelangen, auf der ALLE Produkte aufgelistet sind. Irgendeine Idee, wie das geht?

Sie müssten dem Beitragstyp "Produkte" eine Taxonomie zuweisen und dann den Taxonomiebegriff zu einem Ihrer benutzerdefinierten Menüs hinzufügen, um den Benutzer zu einer Archivseite aller Produkte unter der verwendeten Taxonomie zu führen.

Beispiel Ich habe einen benutzerdefinierten Beitragstyp namens "Jobs" mit einer Taxonomie mit der Bezeichnung "Positionen". Alt-Text

Wenn ich alle Jobs mit dem Taxonomiebegriff "Aktuelle Stellenangebote" haben möchte, würde ich ihn auswählen und zum Menü hinzufügen. Alt-Text

Wenn Sie alle Beitragstypen "Produkte" auf der Archivseite haben müssen, können Sie allen eine übergeordnete Taxonomie zuweisen, damit sie alle auf der Archivseite aufgelistet werden.

Chris_O
quelle
@Chris_O : Dies ist eine Möglichkeit, aber nicht die einzige und erfordert auch einen angemessenen Aufwand, um die Kategorisierung durch den Benutzer aufrechtzuerhalten. JMTCW sowieso.
MikeSchinkel
Macht Sinn. Hoffentlich wird die benutzerdefinierte Indexseite für den Post-Typ im Kern adressiert.
Chris_O
0

Ich denke, es ist eine bessere Lösung, über einen benutzerdefinierten Beitragstyp ein Beitragstyp-Archiv zu erstellen und die archivierten Beiträge in diesem Archiv zu verschieben. Fügen Sie außerdem den aktuellen post_type zum Postmeta dieses neuen post_type hinzu, um dies rückgängig zu machen. Ich habe ein Plugin dafür geschrieben und aktuell können Sie dies ohne Stylesheets, Bilder und Sprachdatei auf gist.github / 978690 sehen .

bueltge
quelle