Cerca nel sito

Rss Posts

Rss Comments

Login

 

WordPress, post formattati a seconda della categoria

ago 04 by luchino

Non molto tempo fa ho letto un interessantissimo post di Wolly che spiegava come personalizzare la formattazione degli articoli di WordPress secondo la categoria.

Il post, che vi invito a leggere, spiegava come ottenere in pochi semplici passaggi una versione personalizzata del file single.php, utilizzato ormai da quasi tutti i temi di WordPress per formattare la pagina dei post.

In pratica il post di Wolly consiglia di modificare il file single originale inserendo un if che dice a WordPress di utilizzare il normale contenuto del file single.php per tutti i post ad eccezione di quelli appartenenti ad una particolare categoria di cui va indicato l'id e per la quale va specificato un file alternativo che si occuperà della formattazione di tutti gli articoli di quella categoria.

Leggendo mi è venuto in mente che molte persone potrebbero voler personalizzare anche per più di una categoria e ritengo che ciò possa essere fatto prendendo spunto dal suggerimento di Wolly ma rendendo il tutto più semplice e limitando, dopo la configurazione iniziale, le operazioni alla semplice creazione di un nuovo file per ogni categoria.

L'idea di base è di avere un controllo dinamico basandoci sull'id della categoria (consigliato) o al limite anche sul nome, in modo tale che se abbiamo creato una formattazione ad hoc WordPress utilizzerà questa, altrimenti utilizzerà il contenuto del file single.php del template.

Per iniziare recuperiamo l'id della categoria relativa al nostro post, per farlo utilizzeremo la funzione get_the_category presente nel Codex di WordPress, quindi inseriamo all'inizio del file single.php questo codice

<?php
global $post;
$categoriesx = get_the_category($post->ID);
$catIDx = $categoriesx[0]->cat_ID;
?>

in questo modo la variabile $catIDx conterrà l'id della prima categoria, poichè WP consente di asociare più categorie al singolo post ho dato per scontato che sfrutteremo la prima per valutare se formattarlo in maniera particolare o meno.

Recuperato l'id della categoria è sufficiente creare tanti file quante sono le formattazioni desiderate chiamandole in modo che siano facilmente riconoscibili, io propongo qualcosa del tipo single-ID della categoria.php quindi ad esempio single-1.php

Questi file saranno delle copie esatte del file single.php originale del template ma con le dovute modifiche di layout e per comodità consiglio di caricarli nella directory del vostro tema (wp-content/themes/Nome_Tema).

A questo punto non ci resta che dire a WordPress di controllare se esiste un file di formattazione per la categoria di cui fa parte il nostro post e quindi di utilizzarlo oppure di formattare con il layout di default del tema.

Per fare questo inseriamo un controllo file_exists e poi un if aiutandoci con la funzione load_template di WordPress, inseriamo queste righe subito dopo le precedenti

<?php if(file_exists(TEMPLATEPATH . '/single-'.$catIDx.'.php')){

load_template(TEMPLATEPATH . '/single-'.$catIDx.'.php');
}else{

e in fondo a single.php, proprio alla fine chiudiamo l'else

}

lo vedete in funzione nella pagina di questo post e in tutti i post che hanno come categoria Worpress; ho aggiunto un rettangolo sotto l'articolo con due righe su WordPress e il logo.

Fatemi sapere se lo trovate utile e se lo implementate in qualche vostro blog.

Per chi volesse sostituire l'id della categoria col nome (occhio però in caso rinominiate la categoria il meccanismo non funzionerà più!) potete tranquillamente modificare l'assegnazione della variabile $catIDx facendole assumere il valore del nome della categoria in questo modo

$catIDx = $categoriesx[0]->cat_name;

il resto dello script è invariato, ovviamente i file con le formattazioni saranno del tipo single-Wordpress.php.

Buon divertimento

Condividi
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • FriendFeed
  • HelloTxt
  • LinkedIn
  • Ping.fm
  • Reddit
  • StumbleUpon
  • Technorati
  • Tumblr
  • Twitter
  • Wikio IT
Questo post è inserito nella categoria Wordpress, una piattaforma di blogging molto potente che permette un alto livello di personalizzazione e può essere usata anche per gestire siti, portali e addirittura ecommerce.

Hai bisogno di un aiuto con Wordpress? contattami

11 Comments

Add your comment


  1. wolly
    ago 04 at 10:46

    Bravissimo ottima implementazione :-)
    ciao


  2. luchino
    ago 04 at 10:49

    Che onore!!!
    dividiamo il merito a metà, tu hai dato lo spunto! ;-)

    grazie


  3. carloreggiani
    ago 04 at 13:52

    Si puo’ vedere in azione da qualche parte? Sembra molto interessante…


  4. kilotto
    ago 04 at 13:52

    Io propongo di usare la funziona che funziona sia con id che con nome della categoria, controllando tutte le categorie associate al post e non solo la prima restituita.

    Però, in questo modo, si dovrebbe dichiarare prima un array con le categorie che vogliamo personalizzare e creare un controllo per ogni elemento dell’array.

    :)


  5. kilotto
    ago 04 at 13:53

    ho lasciato in commento con condice php ma non l’ha accettato. :)


  6. luchino
    ago 04 at 13:59

    @carlo è in funzione in tutti i post appartenenti alla categoria WordPress, sotto il post noterai un rettangolo con il logo di wordpress e una descrizione, ma c’è solo sotto gli articoli di questa categoria. In realtà si può addirittura stravolgere il single.php originale perchè ogni file è specifico.

    @kilotto i commenti mi stanno dando sorprese continue hai provato senza i tag php ?


  7. wolly
    ago 04 at 14:49

    p.s.: installa subscribe to comments :-)


  8. MassiGrassi
    ago 04 at 14:50

    Ciao ! una cosa stupidissima mentre sto provando ad implementarlo sul mio blog, ma non dovrebbe essere:

    $catIDx = $categoriesx[0]->cat_ID

    con la x ?

    ciao e grazie.


  9. luchino
    ago 04 at 14:56

    @MassiGrassi si hai perfettamente ragione, avevo aggiunto la x alla fine ma ho dimenticato di sitemare il resto. Ora l’ho sistemato, grazie mille


  10. Antonello
    set 07 at 13:29

    grande post! Proprio quello che cercavo!!!!!! GRAAAAAAAAAAZIE!!!!!!


  11. Roberto
    mar 01 at 15:47

    Ciao volevo chiederti se tale soluzione va bene anche per (copio e incollo la domanda postata in un forum):
    “Ciao,
    spiego il mio problema…
    sto facendo il sito per la squadra di calcio di mio figlio ed è composto da una index.php in cui mi compaiono tutte i riassunti dei post e da delle pagine tipo “settore giovanile” – “juniore” – “prima squadra”. in queste pagine appaiono i post completi (ho abbinato le categorie alle pagine).
    Fin qui tutto bene, l’unico problema è che vorrei fare in modo che se in index.php clicco sul titolo del post (che è solo un riassunto) vengo rimandato alla pagina, ad esempio, “prima squadra” dove lo leggo tutto. Inoltre la pagina “prima squadra” non visualizzerà solo il singolo post che ho cliccato ma scorrendo vorrei trovare anche gli alri.
    Spero di essermi spiegato ;)

    Grazie”

Invia un commento