Reindirizzare l'archivio dei custom post type all'URL della pagina personalizzata
Desidero che la 'pagina archivio del custom post type' punti a una Pagina specifica.
La situazione è la seguente:
Ho una Pagina
in WordPress con permalink http://myurl.com/galleries
. Questa pagina mostra un elenco di post con custom post type = vmgallery
. Ho una logica personalizzata per questa pagina che funziona correttamente.
Da un altro punto di vista, questa pagina funziona come una "pagina archivio del custom post type", poiché visualizza tutti i post per il custom post type vmgallery specifico. Attualmente, se l'utente va su http://myurl.com/vmgallery/ WordPress carica la pagina archivio (archive.php), invece vorrei che venga caricata la pagina http://myurl.com/galleries
.
Come posso ottenerlo?
Hai diverse opzioni qui.
1. Definire lo slug dell'archivio del post type durante la registrazione
Impostando 'has_archive' => 'galleries'
puoi definire uno slug personalizzato per l'archivio del post type.
Consulta la documentazione.
Poi puoi eliminare la tua pagina "galleries" e aggiungere & personalizzare il file archive-post_type.php
2. Disabilitare l'archivio predefinito per il post type
Disabilita l'archivio impostando 'has_archive' => false
e mantieni la pagina per l'archivio del post type.
3. Reindirizzare le richieste dell'archivio alla tua pagina
Puoi reindirizzare permanentemente le richieste dell'archivio predefinito alla tua pagina.
function archive_to_custom_archive() {
if( is_post_type_archive( 'post_slug' ) ) {
wp_redirect( home_url( '/galleries/' ), 301 );
exit();
}
}
add_action( 'template_redirect', 'archive_to_custom_archive' );
Direi che il primo metodo è ottimo!

Puoi suggerirmi quale opzione sarebbe migliore se ho anche "una tassonomia personalizzata per questo tipo di post personalizzato" (il nome della tassonomia personalizzata è 'gallery_categories', un esempio di categoria della galleria è "auto"). E vorrei che http://myurl.com/galleries/auto funzionasse allo stesso modo di http://myurl.com/galleries. Vorrei che avesse quasi lo stesso codice (il codice verificherebbe se si tratta di 'galleries' o 'galleries'/xxx e agirebbe nello stesso modo con minime differenze)?

L'archivio del tipo di post personalizzato e l'archivio della tassonomia personalizzata sono diversi. La prima opzione è sempre buona ma non funzionerà come http://myurl.com/galleries/auto
Non puoi estrarre risultati dal termine auto
. Per questo avrai bisogno di un template di pagina personalizzato e una riscrittura dell'URL per analizzare la richiesta come http://example.com/page-name/?mytax=auto

Perfetto. Nel mio caso ha funzionato solo la terza opzione perché dovevo reindirizzare la richiesta dell'archivio a un determinato post di questo post type. Quindi ho inserito home_url( '/galleries/some-post-slug' ) all'interno del metodo wp_redirect() e così ha funzionato. Grazie

Di seguito il codice per rimuovere il link della pagina archivio senza influenzare l'URL del singolo post. Puoi anche creare una pagina con lo slug dell'archivio.
function dg_custom_post_type_args( $args, $post_type ) {
if ( $post_type === "custom post type" ) {
$args['rewrite'] = array(
'with_front' => false,
'slug' => 'slug here'
);
}
return $args;
}
add_filter( 'register_post_type_args', 'dg_custom_post_type_args', 20, 2 );

Questo codice ha risolto il mio problema.
function redirect_cpt_archive() {
if( is_post_type_archive( 'galleries' ) ) {
wp_redirect( home_url( '/galleries/post-url/' ), 301 );
exit();
}
}
add_action( 'template_redirect', 'redirect_cpt_archive' );
Nel tuo custom post type in functions.php
devi aggiornare 'has_archive' => true
.
