Caputo's blog

Informatica, tecnologia, programmazione, fai da te, papercraft e papertoy

Escludere post di una categoria da una pagina o dalla home

aprile 15th, 2008 by Giovanni Caputo

Dopo l’articolo precedente:

Ottenere una pagina con post di una categoria in WordPress ed eliminarla dalla index

ci sono stati un po di problemi.

Non nella nuova pagina create con il template apposito, ma nella home.
Infatti se si ha impostato ke nella home devono essere visualizzati un TOT numero di post, e tra questi post ne pubblichi un numero X della categoria che non vuoi visualizzare nella home, allora nella home vengono visualizzati TOT-X post in totale.

Per risolvere questo problema ho modificato il sorgente di wordpress.
Questo è un errore dovuto a un bug di MYSQL: se si effetta un GROUP BY(raggruppamento) in una query non si può effettuare contemporaneamente un ORDER BY(ordinamento).

Allora per prima cosa ho cambiato idea, cioè ho decido di creare una pagina sul sito che visualizza tutti i post esclusa quelli di una cateria. Per fare questo ho realizzato un template di pagine simile a quello del post precedente.

Ho modificato i paramentri nella funzione query_posts:
query_posts(’cat=-403&paged=’.$paged)

il carattere ‘-’ davanti al codice della catoria significa che vuoi escludere i post di quella categoria.

A questo punto viene la parte più difficile:
ho modoificato il file query.php contenuto nella cartella /blog/wp-includes/
In particolare ho aggiunto solo una riga che permette di escludere la group by se mi trovo all’interno di una certa pagina che nel mio caso eveva id 401

if ($_GET['page_id']==401){$groupby=”;}

Questa istruzione va inserita nella riga 1425 circa, prima della riga:

$request = ” SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits”;

La stessa cosa può essere realizzata nella home, modificando la condizione con if (is_home())

Questo post è stato postato martedì, aprile 15th, 2008 at 18:44 nella categoria Pensieri, tutorial. Tags:.
Puoi seguire tutti i commenti di questo articolo attraverso RSS 2.0 feed. Puoi lasciare un commento, o trackback dal nostro sito.

4 responses about “Escludere post di una categoria da una pagina o dalla home”

  1. Problemi Wordpress “Read More” - Caputo’s Blog - Di tutto di + said:

    [...] Escludere post di una categoria da una pagina o dalla home [...]

  2. Aless{a}ndro said:

    ciao, questo post è molto interessante. io avrei bisogno di creare una pagina con l’elenco di tutti i post (come nella index) ad eccezione della CATEGORIA 4. ho creato il template adatto allo scopo ma non riesco ad ordionare i post che sono mostrati sempre in modo ASC.
    vorrei applicare i tuoi suggerimenti ma siccome uso i permalink non so come fa ad applicare la IF nel file query.php (nel senso che non visualizza mai le pagina con il parametro GET, ma nella url compare il nome della pagina).
    hai un suggerimento?
    ciao! grazi per la guida!

  3. Giovanni Caputo said:

    bella domanda…
    al momento non sono riuscito a trovare il modo per risolvere questo problema.
    In particolare xke ci sono dei problemi con la funzione get_query_var(‘pagename’) che restituisce appunto il nome della pagina.
    In particolare se la url è del tipo:
    http://URL/photos/
    la funzione restituirà “photos” come giusto che sia,
    mentre se l’URL è del tipo:
    http://URL/photos/photo/234243
    il risultato, purtroppo, è una stringa vuota.
    In effetti se ci si sposta dalla pagina dei post, verso i vecchi post, è normale che l’url cambi con qualcosa di questo tipo e che quindi il codice nn funzioni +.
    Puoi cmq provare a modificare e riscontrare il problema
    if ($_GET['page_id']==401){$groupby=”;}
    con qlcs del tipo
    if (strcmp(get_query_var(‘pagename’), “NOME_PAGINA”)){$groupby=”;}

    Al momento + di questo nn so dirti.
    Se ho nuove informazioni o nuove idee ti faccio sapere magari per anche per e-mail

  4. Giovanni Caputo said:

    Forse ho trovato il plug in che potrebbe risolvere tutti questi problemi. Al momento visto che la mia soluzione funziona, non l’ ho provato ancora. Se qualcuno lo prova mi faccia sapere, grazie.
    il plug-in è:

    http://wordpress.org/extend/plugins/simply-exclude/screenshots/

Lascia un commento

You must be loggati to post a comment.