web-dev-qa-db-fra.com

Ajout de contenu à des pages d'archive et de taxonomie sur des types d'articles personnalisés?

J'ai un type de message personnalisé nommé "Produits" et une taxonomie appelée "Utilisation". Sur ma page de destination "Produits", je souhaite un contenu personnalisé qui peut être modifié via WYSIWYG par le client. Il en va de même pour la page de destination de la taxonomie. Mon idée était de créer de fausses pages et d'extraire simplement le contenu via ID dans mes modèles archive-products.php et taxonomy-usage.php, mais j'étais curieux de savoir s'il y avait une meilleure façon de le gérer.

8
paper_robots

La première solution peut utiliser l’API Paramètres et créer deux champs "Description des produits" et "Description de l’utilisation", après avoir montré dans votre modèle que les champs sont aussi faciles qu’un :

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

Cependant, l’API de paramètres n’est pas la meilleure partie de WP noyau, et il est probable que vous créez une page de paramètres pour les seuls champs qu’elle ne vaut pas.

Une autre approche consiste à utiliser la page (avec un modèle de page personnalisé ) comme archive.

Créez une page et appelez-la "Archive du produit"

Dans ce mettre quelque chose comme ça:

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

Après cela, dans votre backend, créez une page et assignez-la au modèle que vous venez de créer. Ecrivez ce que vous voulez dans le contenu de la page et lorsque vous ouvrirez la page, vous verrez le contenu de la page et les produits.

La même chose peut être faite pour la page taxonomie. Il suffit de changer le modèle de page et la requête qu'il contient.

Si, pour une raison quelconque, vous devez utiliser archive-products.php comme archive de produit, vous pouvez également créer un modèle personnalisé, mais l'utiliser uniquement pour récupérer le contenu de la page.

Créez un fichier php dans votre thème et nommez-le 'page-prod-description.php' . Dans ce fichier mettez seulement:

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

Ce fichier crée un modèle de page personnalisé. Ce modèle peut être attaché à des pages, mais ces pages ne peuvent pas s'appeler directement _, car si vous l'essayez, vous serez redirigé vers la page d'accueil.

Maintenant, connectez-vous sur votre backend et créez une page, intitulez-la "Description des produits" et affectez le modèle de page que vous venez de créer. Si vous essayez d'accéder à la page http://example.com/product-description, vous serez redirigé vers la page d'accueil.

archive-products.php, dans votre modèle d'archive de produit, vous pouvez utiliser le contenu inséré dans cette page comme suit:

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

Désormais, vos clients peuvent se connecter en backend et éditer la page "Description des produits". Tout ce qui est écrit dans le contenu de la page sera affiché dans la page d'archivage.

La même chose peut évidemment être faite pour les archives de taxonomie.

13
gmazzap

Vous pouvez créer des pages normales, puis appliquer des modèles personnalisés contenant la boucle personnalisée appropriée pour générer le CPT. Vous pouvez également créer une page d'options (ou ajouter une option dans le personnalisateur de thèmes), où le client peut ajouter du contenu via WYSIWYG, puis exporter ce contenu dans le modèle d'archive approprié.

0
markcbain