Hinzufügen von Inhalten zu Archiv- und Taxonomieseiten zu benutzerdefinierten Beitragstypen?

8

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "Produkte" und eine Taxonomie mit dem Namen "Verwendung". Auf meiner Zielseite "Produkte" möchte ich benutzerdefinierte Inhalte haben, die vom Kunden über WYSIWYG bearbeitet werden können. Gleiches gilt für die Taxonomie-Landingpage. Mein Gedanke war, gefälschte Seiten zu erstellen und den Inhalt einfach per ID in meine Vorlagen archive-products.php und taxonomy-usage.php zu ziehen, aber ich war neugierig, ob es einen besseren Weg gibt, damit umzugehen.

paper_robots
quelle

Antworten:

12

Die erste Lösung kann darin bestehen, die Einstellungs-API zu verwenden und zwei Felder "Produktbeschreibung" und "Verwendungsbeschreibung" zu erstellen. Anschließend wird in Ihrer Vorlage angezeigt, dass Felder wie folgt einfach sind:

$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];

Die Einstellungs-API ist jedoch nicht der beste Teil des WP-Kerns und erstellt wahrscheinlich eine Einstellungsseite nur für die Felder, die sich nicht lohnen.

Ein anderer Ansatz ist die Verwendung einer Seite (mit einer benutzerdefinierten Seitenvorlage ) als Archiv.

Erstellen Sie eine Seite und nennen Sie sie "Produktarchiv".

Darin setzen Sie so etwas:

<?php
/*
Template Name: Products Archive
*/

 get_header();

 if ( have_posts() ) the post();

 the_content(); // this will output the page content     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // this will require a 'entry-product.php' where you can put all your product markup
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

Erstellen Sie anschließend in Ihrem Backend eine Seite und weisen Sie sie der gerade erstellten Vorlage zu. Schreiben Sie alles, was Sie wollen, in den Seiteninhalt. Wenn Sie die Seite öffnen, sehen Sie den Seiteninhalt und die Produkte.

Das gleiche kann für die Taxonomieseite gemacht werden. Ändern Sie einfach die Seitenvorlage und die darin enthaltene Abfrage.

Wenn Sie aus irgendeinem Grund archive-products.phpals Produktarchiv verwenden müssen, können Sie alternativ eine benutzerdefinierte Vorlage erstellen, diese jedoch nur zum Abrufen des Seiteninhalts verwenden.

Erstellen Sie eine PHP-Datei in Ihrem Thema und nennen Sie es "page-prod-description.php" . In diese Datei nur setzen:

<?php
/*
Template Name: Products Description
*/
wp_safe_redirect( home_url() );
exit();

Diese Datei erstellt eine benutzerdefinierte Seitenvorlage. Diese Vorlage kann an Seiten angehängt werden, diese Seiten können jedoch nicht direkt aufgerufen werden . Wenn Sie es versuchen, werden Sie zur Startseite weitergeleitet.

Melden Sie sich jetzt in Ihrem Backend an und erstellen Sie eine Seite, nennen Sie sie "Produktbeschreibung" und weisen Sie die gerade erstellte Seitenvorlage zu. Wenn Sie versuchen, auf die Seite zuzugreifen, werden http://example.com/product-descriptionSie zur Startseite weitergeleitet.

In Ihrer Produktarchivvorlage archive-products.phpkönnen Sie den auf dieser Seite eingefügten Inhalt folgendermaßen verwenden:

$desc = get_pages('meta_key=_wp_page_template&meta_value=page-prod-description.php');
if ( ! empty($desc) ) {
   $page = array_shift($desc);
   echo apply_filters('the_content', $page->post_content );
}

Jetzt können sich Ihre Kunden im Backend anmelden und die Seite "Produktbeschreibung" bearbeiten. Alles, was in den Seiteninhalt geschrieben ist, wird auf der Archivseite angezeigt.

Das Gleiche kann natürlich auch für das Taxonomiearchiv getan werden.

gmazzap
quelle
Dies wirkt sich jedoch auf das main_queryObjekt aus $wp_queryund führt dazu, dass es nicht das Recht post_typefür die Abfrage auf Archivseiten ausgibt . Dadurch werden Ihre Aufrufe an Filter wie pre_get_postsfür eine Archivseite wertlos. Dies ist das Hauptproblem. Wordpress muss auch die Möglichkeit bieten, Post Type Archives und Taxonomy Archives Content zu verwalten.
Solomon Closson
Mit beiden von Ihnen angegebenen Methoden können Sie damit umgehen Sloppy. Leider gibt es dafür keinen sauberen Weg. Wordpress muss hier einen sauberen Weg bieten, IMO!
Solomon Closson
0

Sie können normale Seiten erstellen und dann benutzerdefinierte Vorlagen anwenden, die die entsprechende benutzerdefinierte Schleife zur Ausgabe des CPT enthalten. Sie können auch eine Optionsseite erstellen (oder dem Theme Customizer eine Option hinzufügen), auf der der Client Inhalte über WYSIWYG hinzufügen und diese Inhalte dann in der entsprechenden Archivvorlage ausgeben kann.

Markcbain
quelle
Gibt es ein Beispiel für den Basiscode, den Sie dazu verwenden würden?
Brad Dalton