Come impostare una pagina di categoria come home page del blog?
Voglio utilizzare una pagina di categoria come home page del mio blog. È possibile farlo e come posso realizzarlo? Ho provato con una regola di rewrite in .htaccess ma non ha funzionato.

Aggiornamento
Eliminando tutte le altre soluzioni, rimane almeno un'opzione: template_redirect
:
function wpse121308_redirect_homepage() {
// Controlla l'indice degli articoli del blog
// NON la pagina frontale del sito,
// che sarebbe is_front_page()
if ( is_home() ) {
wp_redirect( get_category_link( $id ) );
exit();
}
}
add_action( 'template_redirect', 'wpse121308_redirect_homepage' );
Ovviamente dovrai passare l'appropriato $id
della categoria.
Il vantaggio di reindirizzare su template_redirect
è che avrai solo un caricamento del template, piuttosto che un secondo reindirizzamento dopo il caricamento del template.
Nota che puoi agganciarti al processo ancora prima, come su pre_get_posts
, risparmiando potenzialmente un'intera richiesta di query:
add_action( 'pre_get_posts', 'wpse121308_redirect_homepage' );
Risposta Originale
Se tutto ciò che vuoi fare è mostrare una categoria specifica nell'indice degli articoli del blog, puoi ottenerlo con un semplice filtro della $wp_query
principale su pre_get_posts
:
function wpse1862_pre_get_posts( $query ) {
// Modifica solo la query principale
// nella pagina indice degli articoli del blog
if ( is_home() && $query->is_main_query() ) {
$query->set( 'category_name', 'slug-categoria-qui' );
}
}
add_action( 'pre_get_posts', 'wpse1862_pre_get_posts' );
Se invece vuoi modificare il template, allora puoi fare una di queste due cose:
- Creare un
home.php
con il markup desiderato - Usare
template_redirect
ohome_template
per forzare WordPress a includere il tuo templatecategory.php
.
Modifica
E se vuoi che l'URL dell'indice degli articoli appaia come:
www.esempio.com/principale
Allora puoi usare una Pagina Frontale Static, e assegnare una pagina statica chiamata "principale" come tuo indice degli articoli.
E se questo è il tuo obiettivo:
Voglio veramente il reindirizzamento. Voglio che la home page (
http://esempio.com/
) reindirizzi alla pagina della categoria (che appare comehttp://esempio.com/principale/
)
...allora la risposta accettata è corretta per il tuo caso d'uso.

Scusa, no. Voglio davvero il reindirizzamento. Voglio che la homepage (http://example.com/
) reindirizzi alla pagina di categoria (che appare come http://example.com/main/
), perché le categorie sul sito sono 'Edizioni' (per paese) e quella predefinita è quella statunitense (main). Vorrei poter modificare la descrizione della bounty per renderlo chiaro.

Puoi modificare la domanda per renderlo chiaro. E se la tua domanda è così diversa da quella originale, avresti dovuto fare una tua domanda invece di mettere una bounty su questa. E poi: perché vuoi proprio un reindirizzamento? Un reindirizzamento è un'implementazione, non un obiettivo finale. Descrivi cosa stai effettivamente cercando di ottenere. Un reindirizzamento potrebbe non essere l'unica o la migliore implementazione.

La pagina di categoria non può essere la homepage (semplicemente non funziona così).
Ci sono altre due opzioni:
- Limitare la homepage ai post di una specifica categoria (simile ma non la stessa cosa).
- Reindirizzare la homepage alla vera pagina di categoria.
Dato che sembri a tuo agio con i reindirizzamenti, prova questo. Crea un template home.php
nella directory del tuo tema con il seguente contenuto:
<?php
wp_redirect( 'http://www.tuosito.com/category/slug-categoria' );
?>
Probabilmente esiste un modo più pulito per farlo usando gli hook, ma al momento non mi viene in mente nulla.

Grazie, era proprio quello che stavo cercando. WP dovrebbe documentare meglio tutti quei file PHP speciali (come il maintenance.php).

Il modo più semantico per farlo, invece di utilizzare un reindirizzamento (che richiede tempo di connessione aggiuntivo), è creare un template di pagina personalizzato.
Nuova pagina:
/* Template Name: Nuova Homepage per Categoria */
<?php query_posts('cat_id'=>'3');?>
<--inserisci il loop-->

Se vuoi reindirizzare a una categoria specifica, ad esempio la categoria con ID 3, allora copia il contenuto da category.php e crea un altro template come category-3.php. Dopodiché:
* Template Name: Nuova Homepage per Cat 3*/
<?php query_posts('cat_id'=>'3');?>
<--inserisci loop-->
In WordPress, nella sezione Impostazioni > Lettura, dobbiamo impostare la home come pagina di articoli e per la pagina home selezionare "Nuova Homepage per Cat 3" come template.
