@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:
(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.php
Themenvorlagendatei
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.php
und 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):
- Wählen Sie die Menüoption im Admin-Menü.
- Klicken Sie auf das " + " , um ein neues Menü hinzuzufügen.
- Geben Sie Ihren Menünamen ein, was auch immer Sie möchten.
- Klicken Sie auf die Schaltfläche "Menü erstellen" (der Screenshot zeigt "Menü speichern" , beim Hinzufügen wird jedoch "Menü erstellen" angezeigt .)
- Wählen Sie Ihr neues Menü als "Primäre Navigation" .
- Wählen Sie Ihre Seite "Produkte ".
- Klicken Sie auf "Zum Menü hinzufügen".
- Klicken Sie auf "Menü speichern".
(Quelle: mikeschinkel.com )
Schließlich die Ausgabe
Und so könnte eine grundlegende Produktliste aussehen:
(Quelle: mikeschinkel.com )
current-menu-item
Klasse nicht auf Produkte angewendet wird 'li
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:
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.
quelle
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".
Wenn ich alle Jobs mit dem Taxonomiebegriff "Aktuelle Stellenangebote" haben möchte, würde ich ihn auswählen und zum Menü hinzufügen.
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.
quelle
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 .
quelle