Perché WordPress utilizza archive.php invece di page.php?
Ho un Custom Post Type (CPT) chiamato "Careers" con slug "careers".
Ho creato la mia pagina di elenco Careers con Elementor (lo slug della pagina è anche "careers"), ho inserito il widget Posts e ho utilizzato le impostazioni Query per selezionare il mio CPT Careers. Poi ho usato nuovamente Elementor per creare un tema Single post per i miei singoli post di careers. I singoli post funzionano bene, ma ora quando torno alla mia pagina di elenco Careers, ottengo la pagina di archivio che non assomiglia per niente alla pagina che ho creato con Elementor (vedo che la pagina ora utilizza archive.php con il plugin Reveal template). Ho provato a forzare il template selezionando un template di pagina personalizzato, ma non ha aiutato. Ho anche provato a reimpostare i Permalink, ma non ha risolto.
Quando provo ad aprire la mia pagina Careers in Elementor, ottengo l'errore "Preview could not be loaded Error". Se cambio l'URL della pagina da "careers" a "career" o "open-positions", l'errore scompare e posso aprire la pagina con Elementor (con un nuovo slug).
È corretto assumere che lo slug del CPT non può essere lo stesso dello slug della pagina? C'è un modo migliore per ottenere questo risultato (preferibilmente con lo stesso slug sia per la pagina che per il CPT)? O anche con l'aiuto di Elementor pro?
Questo è il mio codice CPT:
function create_careers_posttype() {
register_post_type( 'careers',
array(
'labels' => array(
'name' => __('Careers'),
'singular_name' => __('Career')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'careers'),
'show_in_rest' => true,
'supports' => array('title', 'page-attributes'),
)
);
}
add_action( 'init', 'create_careers_posttype' );

Non puoi utilizzare lo slug careers
come slug di una pagina perché è già in uso come nome del CPT. /careers
è l'archivio dei tuoi tipi di post, ecco perché viene caricato archive.php
e non page.php
.
Anche se avessi una pagina con quello slug, la regola di riscrittura dell'archivio ha una priorità maggiore. Lo troverai anche nella sitemap generata e lo slug /careers
viene utilizzato anche per generare i permalink per i singoli post di quel tipo.
La soluzione più vicina che puoi ottenere è disattivare l'archivio.
Ho provato a forzare il template selezionando un template di pagina personalizzato ma non ha funzionato.
Questo non funziona perché la pagina non è mai ciò che viene visualizzato in primo luogo. WordPress, basandosi sulla query principale, ritiene che ci si trovi in un archivio di post del tipo careers
e si comporterà secondo la gerarchia standard dei template, scegliendo il template più specifico che trova corrispondente. Ad esempio, se fosse disponibile archive-careers.php
avrebbe caricato quello invece.
Ricorda, il template scelto è determinato dai parametri della query principale. WordPress non ha caricato una pagina perché eri su page.php
, è il contrario: ha caricato page.php
perché la query principale indicava che era per una pagina, e potrebbe decidere di caricare un template di pagina personalizzato se quella pagina nella query lo specifica. Ma se si tratta di un archivio questo non accade. Guarda la gerarchia dei template per maggiori dettagli.
O anche con l'aiuto di Elementor pro?
Se vuoi stilizzare quell'archivio utilizzando Elementor, allora dovrai contattare il supporto di Elementor o postare in una community di Elementor. Il supporto per gli sviluppatori di plugin di terze parti è fuori tema qui e non rientra nello scope di questo stack.

Ciao Tom, non sto cercando supporto per Elementor qui, forse non sono stato abbastanza chiaro ma hai risposto alla mia domanda sull'unicità degli slug, quindi grazie :D

Ecco un link molto utile per capire https://wphierarchy.com/
