Usando Madera, estoy tratando de generar una página de archivo personalizada para mi tipo de publicación personalizada. CPT es person
y simplemente estoy tratando de representar archivo-persona.php al visitar «misitio.com/persona». No importa lo que haga, todo lo que obtengo es el resultado de archivo.phpnunca archivo-persona.php.
Si yo tener estado presionando ‘Guardar’ en los enlaces permanentes como sugiere mucha gente.
Como prueba, usando el tema base de WP 2020, hice un equivalente archivo-post_type.php en la forma clásica de WordPress, y todo funciona bien. Esto indica que mi cpt y los enlaces permanentes están bien, y el problema quizás tenga que ver específicamente con mi tema basado en Timber.
Intenté cambiar las propiedades de mi nombre de CPT para asegurarme de que no estoy creando conflictos de enlaces permanentes.
Vistas de madera/parciales, páginas, individuales y single-post_type.php todos están funcionando bien.
Aparte de jugar con las páginas archive*.php, ¿qué es lo primero que debería mirar? Dentro de la inicialización de functions.php Timber, ¿algo importante que afectaría específicamente solo a los archivos?
ACTUALIZAR: Al escribir esta publicación, veo lo que podría ser un problema. ¿Tengo que registrar mis CPT y taxonomías explícitamente a través de Timber init, para que los conozca por completo?
archive.php (muy similar a uno de Tema de inicio de madera)
<?php
use TimberTimber;
global $paged;
if ( ! isset( $paged ) || ! $paged ) {
$paged = 1;
}
$templates = array( 'pages/archive.twig', 'pages/index.twig' );
$context = Timber::context();
$context['title'] = 'Archive';
if ( is_day() ) {
$context['title'] = 'Archive: ' . get_the_date( 'D M Y' );
} elseif ( is_month() ) {
$context['title'] = 'Archive: ' . get_the_date( 'M Y' );
} elseif ( is_year() ) {
$context['title'] = 'Archive: ' . get_the_date( 'Y' );
} elseif ( is_tag() ) {
$context['title'] = single_tag_title( '', false );
} elseif ( is_category() ) {
$context['title'] = single_cat_title( '', false );
array_unshift( $templates, 'archive-' . get_query_var( 'cat' ) . '.twig' );
} elseif ( is_post_type_archive() ) {
$context['title'] = post_type_archive_title( '', false );
array_unshift( $templates, 'archive-' . get_post_type() . '.twig' );
}
// Grabs everything on the site, regular posts and CPT's.
$context['posts'] = new TimberPostQuery();
// Just for testing, to check if "person" posts can at least be rendered via archive.php. They do.
//$args = ['post_type' => 'person'];
//$context['posts'] = new TimberPostQuery($args);
Timber::render( $templates, $context );
?>
archivo-persona.php Solo una versión reducida de archive.php, con ‘persona’ forzado como post_type (en lugar de agarrar todo publicaciones):
use TimberTimber;
global $paged;
if ( ! isset( $paged ) || ! $paged ) {
$paged = 1;
}
$templates = array( 'pages/archive-person.twig' );
$context = Timber::context();
$context['title'] = 'Archive: Person';
$args = [
'posts_per_page' => 10,
'paged' => $paged,
'post_type' => 'person',
];
$context['posts'] = new TimberPostQuery($args);
Timber::render( $templates, $context );
funciones.php
class mySite extends TimberSite {
public function __construct() {
add_theme_support( 'post-thumbnails' );
add_theme_support( 'menus' );
add_filter( 'timber_context', array( $this, 'add_to_context' ) );
parent::__construct();
}
function add_to_context( $context ) {
$context['menu'] = new TimberMenu('main-menu');
$context['site'] = $this;
return $context;
}
}
new mySite();
function create_posttypes() {
register_post_type( 'person',
array(
'labels' => array(
'name' => __( 'Persons' ),
'singular_name' => __( 'Person' )
),
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' )
)
);
}
add_action( 'init', 'create_posttypes' );
.