it-swarm.com.de

Hinzufügen von Inhalten zu Archiv- und Taxonomieseiten für benutzerdefinierte Beitragstypen?

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "Produkte" und eine Taxonomie mit dem Namen "Verwendung". Auf meiner Zielseite "Produkte" möchte ich benutzerdefinierten Inhalt haben, der vom Client über WYSIWYG bearbeitet werden kann. Gleiches gilt für die Taxonomie-Zielseite. 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.

8
paper_robots

Die erste Lösung ist die Verwendung der Settings API und das Erstellen von 2 Feldern "Produktbeschreibung" und "Verwendungsbeschreibung". Anschließend können Sie in Ihrer Vorlage anzeigen, dass Felder wie a 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 Felder, die es nicht wert sind.

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

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

Darin steckt 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 diese der gerade erstellten Vorlage zu. Schreiben Sie, was Sie wollen, in den Seiteninhalt. Wenn Sie die Seite öffnen, sehen Sie den Seiteninhalt und die Produkte.

Dasselbe kann für die Taxonomie-Seite gemacht werden. Ändern Sie einfach die Seitenvorlage und die darin enthaltene Abfrage.

Wenn Sie archive-products.php aus irgendeinem Grund als Produktarchiv verwenden möchten, können Sie alternativ eine benutzerdefinierte Vorlage erstellen, die jedoch nur zum Abrufen des Seiteninhalts verwendet wird.

Erstellen Sie eine PHP-Datei in Ihrem Theme und nennen Sie sie 'page-prod-description.php' . In dieser Datei setzen Sie nur:

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

In dieser Datei wird eine benutzerdefinierte Seitenvorlage erstellt. Diese Vorlage kann an Seiten angehängt werden, aber diese Seiten können nicht direkt genannt werden, da Sie, wenn Sie es versuchen, zur Homepage weitergeleitet werden.

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

In Ihrer Produktarchivvorlage archive-products.php kö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 und alles, was in den Seiteninhalt geschrieben ist, wird auf der Archivseite angezeigt.

Dasselbe kann natürlich auch für Taxonomie-Archive gemacht werden.

13
gmazzap

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 eine Option zum Theme Customizer hinzufügen), auf der der Client Inhalte über WYSIWYG hinzufügen und diese dann in der entsprechenden Archivvorlage ausgeben kann.

0
markcbain