Añadir contenido a páginas de archivo y taxonomías en tipos de posts personalizados
Tengo un custom post type llamado "Productos" y una taxonomía llamada "Uso". En la página de destino de "Productos" me gustaría tener contenido personalizado que pueda ser editado mediante WYSIWYG por el cliente. Lo mismo aplica para la página de destino de la taxonomía. Mi idea era crear Páginas falsas y simplemente extraer el contenido mediante ID en mis plantillas archive-products.php y taxonomy-usage.php, pero me preguntaba si habría una mejor forma de manejarlo.

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 esos campos en tu plantilla es tan 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 crear una página de configuración solo para esos campos no valga la pena.
Otro enfoque es usar una página (con una plantilla de página personalizada) como archivo.
Crea una página y llámala "Archivo de Productos"
En ella coloca algo como esto:
<?php
/*
Template Name: Archivo de Productos
*/
get_header();
if ( have_posts() ) the_post();
the_content(); // esto mostrará el contenido de la página
$p_query = new WP_Query('post_type=products');
if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
$p_query->the_post();
// esto requerirá un 'entry-product.php' donde puedes colocar todo tu marcado de producto
get_template_part('entry', 'product');
} }
wp_reset_postdata();
get_footer();
Después de eso, en tu backend, crea una página y asígnale la plantilla recién creada. Escribe lo que quieras en el contenido de la página y cuando la abras, verás el contenido de la página y los productos.
Lo mismo se puede hacer para la página de taxonomía. Solo cambia la plantilla de página y la consulta en ella.
Si, por alguna razón, necesitas usar archive-products.php
como archivo de productos, una alternativa es crear una plantilla personalizada, pero usarla solo para recuperar el contenido de la página.
Crea un archivo php en tu tema y nómbralo 'page-prod-description.php'. En este archivo coloca solo:
<?php
/*
Template Name: Descripción de Productos
*/
wp_safe_redirect( home_url() );
exit();
Lo que hace este archivo es crear una plantilla de página personalizada. Esa plantilla puede asignarse a páginas, pero esas páginas no pueden llamarse directamente, porque si lo intentas serás redirigido a la página de inicio.
Ahora inicia sesión en tu backend y crea una página, titúlala "Descripción de Productos" y asigna la plantilla de página recién creada. Si intentas acceder a la página http://example.com/product-description
serás redirigido a la página de inicio.
En tu plantilla de archivo de productos, archive-products.php
, puedes usar el contenido insertado en esa página así:
$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 tus clientes pueden iniciar sesión en el backend y editar la página "Descripción de Productos" y todo lo que escriban en el contenido de la página se mostrará en la página de archivo.
Lo mismo, por supuesto, puede hacerse para el archivo de taxonomía.

Pero hacer esto afectará el objeto main_query
$wp_query
y hará que no muestre el post_type
correcto para la consulta que ocurre en las páginas de archivo. Esto hará que tus llamadas a filtros como pre_get_posts
para una página de archivo sean inútiles. Este es el principal problema. WordPress necesita proporcionar una forma de GESTIONAR también el Contenido de Archivos de Tipo de Entrada y Archivos de Taxonomía.

Podrías crear páginas normales y luego aplicar plantillas personalizadas que contengan el loop personalizado adecuado para mostrar el CPT (Custom Post Type). O también podrías crear una página de opciones (o añadir una opción al Personalizador del Tema), donde el cliente pueda agregar contenido mediante el editor WYSIWYG, y luego mostrar este contenido en la plantilla de archivo correspondiente.
