Come impostare una pagina di categoria come home page del blog?

15 set 2010, 20:24:24
Visualizzazioni: 15.1K
Voti: 5

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.

0
Tutte le risposte alla domanda 4
3
13

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:

  1. Creare un home.php con il markup desiderato
  2. Usare template_redirect o home_template per forzare WordPress a includere il tuo template category.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 come http://esempio.com/principale/)

...allora la risposta accettata è corretta per il tuo caso d'uso.

5 nov 2013 16:17:53
Commenti

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.

its_me its_me
5 nov 2013 16:22:19

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.

Chip Bennett Chip Bennett
5 nov 2013 16:23:21

Chip, il motivo/caso d'uso potrebbe essere diverso, ma la domanda è esattamente la stessa, ecco perché ho evitato un'altra domanda. E come puoi vedere, è già stata postata una risposta simile (anche se usando query_posts, un metodo meno raccomandato).

its_me its_me
5 nov 2013 16:24:53
2

La pagina di categoria non può essere la homepage (semplicemente non funziona così).

Ci sono altre due opzioni:

  1. Limitare la homepage ai post di una specifica categoria (simile ma non la stessa cosa).
  2. 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.

15 set 2010 20:38:12
Commenti

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

2ndkauboy 2ndkauboy
15 set 2010 21:59:46

Tieni presente che questo quasi raddoppia il carico del server per la home page. Il core di WP viene eseguito due volte. Potrebbe essere un fattore importante se hai un discreto numero di visitatori.

Rarst Rarst
15 set 2010 22:06:33
1

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-->
6 gen 2012 22:39:02
Commenti

Sì, è questo. Carica questo template nel tuo tema. Aggiungi una nuova pagina, imposta il template su "New Homepage by Cat". Poi vai su impostazioni > lettura > scegli 'una pagina statica' > pagina iniziale = New Homepage by Cat...

e hai finito...

inTOWN inTOWN
7 nov 2013 20:30:06
0

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.

8 nov 2013 12:59:14