¿Agregar contenido a páginas de archivo y taxonomía en tipos de publicaciones personalizadas?

8

Tengo un tipo de mensaje personalizado llamado "Productos" y una taxonomía llamada "Uso". En mi página de inicio de "Productos" me gustaría tener contenido personalizado que el cliente pueda editar a través de WYSIWYG. Lo mismo ocurre con la página de inicio de la taxonomía. Pensé en crear páginas falsas y simplemente extraer el contenido a través de ID en mis plantillas archive-products.php y taxonomy-use.php, pero tenía curiosidad por saber si había una mejor manera de manejarlo.

robots de papel
fuente

Respuestas:

12

La primera solución puede ser usar la API de configuración y crear 2 campos "Descripción de productos" y "Descripción de uso" , después de eso, mostrar en su plantilla que los campos es fácil como:

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

Sin embargo, la API de configuración no es la mejor parte del núcleo de WP, y probablemente cree una página de configuración solo para que los campos no valgan la pena.

Otro enfoque es usar la página (con una plantilla de página personalizada ) como archivo.

Cree una página y llámela "Archivo de productos"

En él pon algo como eso:

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

Después de eso, en su backend, cree una página y asígnela a la plantilla que acaba de crear. Escriba lo que quiera en el contenido de la página y cuando abra la página, verá el contenido de la página y los productos.

Lo mismo se puede hacer para la página de taxonomía. Simplemente cambie la plantilla de página y la consulta en ella.

Si, por algún motivo, necesita usarlo archive-products.phpcomo archivo del producto, una alternativa es crear una plantilla personalizada, pero úsela solo para recuperar el contenido de la página.

Cree un archivo php en su tema y asígnele el nombre 'page-prod-description.php' . En este archivo pon solo:

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

Lo que hace este archivo es crear una plantilla de página personalizada. Esa plantilla se puede adjuntar a las páginas, pero esas páginas no se pueden invocar directamente , porque si lo prueba, será redirigido a la página de inicio.

Ahora inicie sesión en su servidor y cree una página, llámela "Descripción de los productos" y asigne la plantilla de página que acaba de crear. Si intenta acceder a la página http://example.com/product-description, será redirigido a la página de inicio.

En la plantilla de archivo de su producto archive-products.php, puede usar el contenido insertado en esa página de la siguiente manera:

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

Ahora sus clientes pueden iniciar sesión en el backend y editar la página "Descripción de los productos" y todo lo que está escrito en el contenido de la página se mostrará en la página de archivo.

Lo mismo, por supuesto, se puede hacer para el archivo de taxonomía.

gmazzap
fuente
Pero hacer esto afectará al main_queryobjeto $wp_queryy hará que no genere el derecho post_typepara que la consulta ocurra en las páginas de archivo. Lo que hará que sus llamadas a filtros como pre_get_postspara una página de archivo no tengan valor. Este es el principal problema. Wordpress necesita proporcionar un medio para GESTIONAR también los Archivos de tipo de publicación y el Contenido de archivos de taxonomía.
Solomon Closson
Ambos métodos que proporcionó son una Sloppyforma de manejar esto. Pero desafortunadamente no hay una manera limpia de hacer esto. Wordpress necesita proporcionar una manera limpia aquí, ¡OMI!
Solomon Closson
0

Puede crear páginas normales y luego aplicar plantillas personalizadas que contienen el bucle personalizado apropiado para generar el CPT. O puede crear una página de opciones (o agregar una opción al Personalizador de temas), donde el cliente puede agregar contenido a través de WYSIWYG, y luego generar este contenido en la plantilla de archivo correspondiente.

Markcbain
fuente
¿Algún ejemplo del código básico que usarías para hacer eso?
Brad Dalton