WordPress Italy Forum » Plugin e temi di WP

Listare i post contenuti in una determinata categoria

(33 posts)
  1. Salve a tutti.
    Mi sto cimentanto nella realizzazione di un nuovo tema partendo da un template html opensource trovato in rete.

    Il sito presenta un menu orizzontale di navigazione primaria in alto con un effetto dropdown che si ottiene tramite javascript. Fin qui nessun problema.
    Il menu è del tipo:

    Home | Pagine| Categorie | Approfondimenti | Contatti

    Dove appunto Pagine di riferisce all'elenco delle pagine del sito, Categorie all'elenco delle categorie e Approfondimenti, e qui nasce il mio problema,sezione in cui vorrei una lista di tutti post presenti in una determinata categoria chiamata appunto Approfondimenti

    Per intederci il menu è più o meno una cosa del genere:


    Dove appunto passano su Pagine si ottiene l'elenco dei titoli di tutte le pagine del sito. Idem per categorie con l'elenco dei titoli di tutte le categorie.

    Per quanto riguarda le prime voci del menu (Pagine e Categorie) ho inserito tra gli apposti tag e stilizzati adeguatamente nel css i ThemeTag di Wp:

    Pagine: <?php wp_list_pages('title_li=' ); ?>
    Categorie: <?php wp_list_cats('arguments'); ?>


    Ma non so appunto come richiamare i post sottoforma di lista per la fantomatica categoria Approfondimenti

    Dato che come ho detto il menu è dropdown per ottere l'effetto ho fatto in questo modo:
    <ul id="nav">
    <li class="first"><a href="<?php bloginfo('home'); ?>" target="_self">Home</a></li>
    <li><a href="#">Pagine</a> <strong>//* Qui elenco le pagine</strong>
    <ul>
    <?php wp_list_pages('title_li=' ); ?>
    </ul>
    </li>
    <li><a href="#">Categorie</a> <strong>//** Qui elenco le categorie</strong>
    <ul>
    <?php wp_list_cats('arguments'); ?>
    </ul>
    </li>
    <li><a href="#">Approfondimenti</a>
    <ul>
    ?????? <strong>//** Qui non so come fare!</strong>
    </ul>

    Ho cercato in giro sul forum...ho capito che per fare una cosa del genere è necessaria una modifica al Loop.
    Ho trovato anche quella discussione dove si chiedeva una cosa simile che ha poi portato alla creazione di una sezione Snippet in cui appunto si trova questo interessante post che potrebbe riguardarmi.

    Ho dato anche un occhiata al Codex di wordpress per quanto riguarda i TemplateTags get post

    Il problema è che ...lo snippet non riesco a capire come funziona...una volta creata una nuova pagina del mio tema chiamata appunto catagoria-x.php e inserito il javascript nell'head..è possibile in qualche modo richiamare una lista di post presenti in quella categoria? Se si come?

    Riguardo al Codex...giusto per vedere cosa succedeva...ho provato a inserire una cosa del genere tra i tag <?php query_posts("cat=X");?> e ho Ottenuto che nel menu non mi visualizza niente...ma nell'index...mi visualizza solo gli articoli di quella determinata categoria. Quindi non è la strada giusta.

    Qualche consiglio?
    Grazie

    Pubblicato: 4 annn # -
  2. <li><a href="#">Approfondimenti</a>
    <ul>
    ?????? <strong>//** Qui non so come fare!</strong>
    </ul>

    puoi fare così:

    <li><a href="#">Approfondimenti</a>
    <ul><?php PM_articoli('X','Y'); ?></ul>

    dove X è l'ID della categoria Approfondimenti e Y è il numero di articoli che vuoi mostrare.

    poi ti crei un nuovo file .php (un plugin insomma) nella cartella plugins dove metti questo codice:

    <?php
    /*
    Plugin Name: Articoli Categoria
    Version: 1.0
    Plugin URI:
    Description: Genera elenco post per una categoria approfondimenti
    Author:
    Author URI:
    */
    function PM_articoli($id_cat,$the_limit){
    global $wpdb, $tableposts, $tablepost2cat;
    $arts = $wpdb->get_results("SELECT P2C.*, POST.ID, POST.post_title, FROM $wpdb->posts POST, $wpdb->post2cat P2C
    WHERE P2C.category_id ='$id_cat' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id
    ORDER BY POST.post_date DESC LIMIT $the_limit");
    if ($arts){
    foreach ($arts as $art){
    ?>
    <li><a href="<?php get_permalink($art->ID); ?>"><?php echo $art->post_title; ?></a></li>
    <?php
    }
    }
    }
    ?>

    ricordati di attivare il plugin prima ;-)

    Pubblicato: 4 annn # -
  3. Grazie per la celere risposta MrBrown!

    Ho seguito il tuo consiglio..creato plugin, attivato correttamente..ma se richiamo PM articoli ottengo questo errore:


    WordPress database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM wp_posts POST, wp_post2cat P2C WHERE P2C.category_id ='3' ]
    SELECT P2C.*, POST.ID, POST.post_title, FROM wp_posts POST, wp_post2cat P2C WHERE P2C.category_id ='3' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id ORDER BY POST.post_date DESC LIMIT 1

    Prolemi con la versione di Mysql?!?
    Sono su una macchina Linux con Kernel 2.6.11.12-grsec, Apache 1.3.34, Mysql 4.0.25-standard-log, e PhP 4.3.10.

    Ah mannaggia a me e quando ho abbandonato il manuale di php a pagina 20... :P

    Pubblicato: 4 annn # -
  4. Niente panico, la query ha un piccolo errore (di distrazione), una virgola in più. Quella corretta è

    $arts = $wpdb->get_results("SELECT P2C.*, POST.ID, POST.post_title FROM $wpdb->posts POST, $wpdb->post2cat P2C WHERE P2C.category_id ='$id_cat' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id
    ORDER BY POST.post_date DESC LIMIT $the_limit");

    eh sì, se continuavi a leggere il manuale PHP l'errore lo risolvevi al volo :-)

    Pubblicato: 4 annn # -
  5. Perfetto...adesso funziona una bellezza!! Grazie mille davvero MrBrown...con questo escamotage posso gestire al meglio Wp!

    eh sì, se continuavi a leggere il manuale PHP l'errore lo risolvevi al volo :-)

    Mi sono ripromesso di farlo...anzi ti dirò di più adesso torno a casa e prendo il mallopone...almeno per capire come hai gestito la cosa e da dove spuntano fuori quelle variabili!

    Pubblicato: 4 annn # -
  6. Premetto che anche una veloce ripresa del "tomone" php non mi è servita a molto..quindi mi ritrovo a postare e a rompere :( :)

    La soluzione suggeritami da Mr.Brown funziona alla perfezione per listare i post di una determinata categoria...ma mentre con <ul>
    <?php wp_list_pages('title_li=' ); ?>
    </ul>
    e con <?php wp_list_cats('arguments'); ?> ottengo rispettivamente una lista di pagine e di categorie cliccabile con <ul><?php PM_articoli('X','Y'); ?></ul> ottengo si una lista con i titoli della categoria X ma ahimè..non cliccabili! Spero che MrBrown non mi mandi a quel paese.. :P

    Pubblicato: 4 annn # -
  7. A volte mi stupisco sia di me stesso (di quando sono fesso :P ) sia del fatto che su ogni cosa basta ragionarci un pò. Ho "studiato" spezzoni di codice e mi sono accorto che quello che mancava per ottenere il permalink...non è altro che un echo al posto giusto!

    <a href="<?php echo get_permalink($art->ID); ?>

    Incredibile...ma funziona.

    Pubblicato: 4 annn # -
  8. Serviva anche a me per un elenco delle recensioni
    Sto cercando di capire come si puo' ordinare per titolo di post e come mettere in elenco tutti i post della categoria.

    Pubblicato: 4 annn # -
  9. suggerirerei la lettura dei vari tag dei template sul nostro wiki, relativi alle categorie

    Pubblicato: 4 annn # -
  10. ok :)
    Pensavo che fosse qualcosa che dipendesse dal tuo plugin

    Pubblicato: 4 annn # -
  11. se vuoi usare questo plugin che ho scritto nel thread, devi modificarlo così

    function PM_articoli($id_cat){
    [...]
    $arts = $wpdb->get_results("SELECT P2C.*, POST.ID, POST.post_title FROM $wpdb->posts POST, $wpdb->post2cat P2C WHERE P2C.category_id ='$id_cat' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id
    ORDER BY POST.post_title DESC");

    e invochi la funzione così:

    <?php PM_articoli('X'); ?>

    Pubblicato: 4 annn # -
  12. Grazie mrbrown!
    Ne avevo davvero bisogno.

    Pubblicato: 4 annn # -
  13. Riesumo questo post per chiedere una cosa.
    Se volessi, oltre ai campi sopra citati, sapere anche l'autore del post, andrebbe bene la semantica di questa modifica?

    function PM_articoli($id_cat,$the_limit){
    global $wpdb, $tableposts, $tablepost2cat;
    $arts = $wpdb->get_results("SELECT P2C.*, POST.ID, POST.post_title,
    POST.post_date, POST.post_author FROM $wpdb->posts POST, $wpdb->post2cat P2C
    WHERE P2C.category_id ='$id_cat' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id
    ORDER BY POST.post_date DESC LIMIT $the_limit");
    if ($arts){
    foreach ($arts as $art){
    $myAuthor=$wpdb->get_var("SELECT display_name from $wpdb->users WHERE ID=$art->post_author");
    ?>
    <li><small><strong><?php echo $art->post_date;?></strong></small> -
    <a href="<?php echo get_permalink($art->ID); ?>" title="<?php echo $art->post_title; ?>">
    <?php echo $art->post_title; ?></a> di <em><?php echo $myAuthor?></em></li>
    <?php
    }
    }
    }
    ?>

    Praticamente ho inserito una query nel ciclo for che per ogni articolo pesca l'id dell'autore corrispondente della tabella users.
    E' l'unico modo o potrei integrare tutto in una query?

    Pubblicato: 4 annn # -
  14. prova, se funziona vuol dire che hai fatto bene

    Pubblicato: 4 annn # -
  15. ciao mrbrown, forse mi sono spiegato male, il plugin modificato funziona bene, solo vorrei sapere se si può ottimizzare, nel senso evitare di mettere quella query nel ciclo for e riuscire ad avere anche l'autore dalla prima.

    Pubblicato: 4 annn # -
  16. potresti provare così: (non l'ho testata)

    SELECT P2C.*, AUT.display_name, POST.ID, POST.post_title,
    POST.post_date, POST.post_author FROM $wpdb->posts POST, $wpdb->post2cat P2C, $wpdb->users AUT
    WHERE P2C.category_id ='$id_cat' AND POST.post_status = 'publish' AND POST.ID = P2C.post_id
    ORDER BY POST.post_date DESC LIMIT $the_limit

    se non va, allora puoi tranquillamente usare la soluzione che hai proposto nel messaggio 13.

    piccolo aggiornamento: l'ho testata e sembra funzionare. Occhio però: display_name è un campo che nelle versioni 1.5.X di WP non c'è ed è presente a partire dalla 2.0.

    Pubblicato: 4 annn # -
  17. La sto testando e ritestando, anche sparandola direttamente sul db con parametri statici, ma nn va.
    Prende il desc limit 4 che gli imposto, però anzichè farmi vedere gli ultimi 4 record mi duplica gli ultimi 2, con il campo display_name differente.

    In pratica un record è reale, mentre il duplicato riporta il display_name di un altro autore.
    Provo ancora un pò a modificare poi al limite torno sui miei passi.

    Grazie ancora Mr ;-)

    Pubblicato: 4 annn # -
  18. mrbrown, grazie infinite per il tuo plugin!

    A partire da questo ne sto sviluppando una versione che accetta categorie multiple, ordinamenti personalizzati e altre amenità. Mi dai il permesso di pubblicarlo (con i dovuti ringraziamenti)?

    Pubblicato: 4 annn # -
  19. certo che puoi pubblicarlo, segnalalo anche su questo forum, magari interessa anche agli altri, (oltre a me)

    Pubblicato: 4 annn # -
  20. Pa-parapappà!

    Ecco il plugin:
    http://www.geek-notes.com/wordpress/19/plugin-posts-in-category/

    Se avete commenti, idee, suggerimenti o domande, ovviamente mi fa piacere.

    Ne approfitto per chiedere a voi che siete "del giro":

    Ora che ho pubblicato il mio primo plugin, come faccio a farlo conoscere, ad aggiungerlo al Wordpress Plugin Database, insomma a far sì che si diffonda tra quelli a cui potrebbe interessare utilizzarlo?
    Qual è il normale iter di un buon plugin per wordpress? Per ora l'ho inserito in wp-plugins.net

    Pubblicato: 4 annn # -

Feed RSS per questa discussione

Replica »

Devi aver fatto il login per poter pubblicare articoli.