Ajouter du contenu aux pages d'archive et de taxonomie sur les types de publication personnalisés?

8

J'ai un type de message personnalisé nommé "Produits" et une taxonomie appelée "Utilisation". Sur ma page de destination "Produits", j'aimerais avoir 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. Ma pensée était de créer de fausses pages et de simplement extraire 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.

paper_robots
la source

Réponses:

12

La première solution peut être d'utiliser l' API Paramètres et de créer 2 champs "Description des produits" et "Description de l'utilisation" , après cela, montrant dans votre modèle que les champs sont faciles comme:

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

Cependant, l'API des paramètres n'est pas la meilleure partie du noyau WP, et crée probablement une page de paramètres uniquement pour les champs qui n'en valent pas la peine.

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

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

On y met 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 affectez-la au modèle que vous venez de créer. Écrivez 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 de taxonomie. Modifiez simplement le modèle de page et la requête qu'il contient.

Si, pour une raison quelconque, vous devez utiliser archive-products.phpcomme archive de produit, une alternative est de créer un modèle personnalisé, mais utilisez-le 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 que fait ce fichier, c'est la création d'un modèle de page personnalisé. Ce modèle peut être joint à des pages, mais ces pages ne peuvent pas être appelées directement , car si vous l'essayez, vous serez redirigé vers la page d'accueil.

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

Dans votre modèle d'archive de produit archive-products.php, 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 );
}

Maintenant, vos clients peuvent se connecter en backend et modifier la page "Description des produits" et tout est écrit dans le contenu de la page sera affiché dans la page d'archive.

La même chose, bien sûr, peut être faite pour les archives de taxonomie.

gmazzap
la source
Mais cela affectera l' main_queryobjet $wp_queryet l'empêchera de produire le droit post_typepour la requête se produisant sur les pages d'archives. Ce qui rendra vos appels à des filtres comme pre_get_postspour une page d'archives sans valeur. C'est le problème majeur. Wordpress doit également fournir un moyen de GÉRER le contenu des archives des types de publications et des archives taxonomiques.
Solomon Closson
Les deux méthodes que vous avez fournies sont un Sloppymoyen de gérer cela. Mais malheureusement, il n'y a pas de moyen propre de le faire. Wordpress doit fournir un moyen propre ici, OMI!
Solomon Closson
0

Vous pouvez créer des pages normales, puis appliquer des modèles personnalisés qui contiennent la boucle personnalisée appropriée pour sortir le CPT. Ou vous pouvez créer une page d'options (ou ajouter une option au personnalisateur de thème), où le client peut ajouter du contenu via WYSIWYG, puis sortir ce contenu dans le modèle d'archive approprié.

markcbain
la source
Un exemple du code de base que vous utiliseriez pour faire cela?
Brad Dalton