Home › Forum › Plugin e temi di WP › Listare i post contenuti in una determinata categoria
-
AutorePost
-
-
24 Marzo 2006 alle 12:29 #1282pmalerbaPartecipante
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
-
24 Marzo 2006 alle 14:12 #37835SteveAglAmministratore del forum
<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 eY
è 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
-
24 Marzo 2006 alle 20:20 #37837pmalerbaPartecipante
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…
-
24 Marzo 2006 alle 20:27 #37838SteveAglAmministratore del forum
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
-
24 Marzo 2006 alle 20:36 #37840pmalerbaPartecipante
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!
-
26 Marzo 2006 alle 0:02 #37848pmalerbaPartecipante
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.. -
26 Marzo 2006 alle 12:35 #37865pmalerbaPartecipante
A volte mi stupisco sia di me stesso (di quando sono fesso ) 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.
-
26 Marzo 2006 alle 12:52 #37867FringePartecipante
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.
-
26 Marzo 2006 alle 14:36 #37870SteveAglAmministratore del forum
suggerirerei la lettura dei vari tag dei template sul nostro wiki, relativi alle categorie
-
26 Marzo 2006 alle 22:03 #37876FringePartecipante
ok
Pensavo che fosse qualcosa che dipendesse dal tuo plugin
-
27 Marzo 2006 alle 10:02 #37879SteveAglAmministratore del forum
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'); ?>
-
27 Marzo 2006 alle 11:56 #37880FringePartecipante
Grazie mrbrown!
Ne avevo davvero bisogno.
-
14 Aprile 2006 alle 12:43 #38157Mn3m0n1cPartecipante
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?
-
14 Aprile 2006 alle 13:42 #38158SteveAglAmministratore del forum
prova, se funziona vuol dire che hai fatto bene
-
14 Aprile 2006 alle 15:16 #38165Mn3m0n1cPartecipante
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.
-
15 Aprile 2006 alle 9:10 #38175SteveAglAmministratore del forum
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. -
15 Aprile 2006 alle 20:16 #38183Mn3m0n1cPartecipante
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
-
10 Maggio 2006 alle 11:16 #38398petroPartecipante
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)?
-
10 Maggio 2006 alle 14:48 #38402SteveAglAmministratore del forum
certo che puoi pubblicarlo, segnalalo anche su questo forum, magari interessa anche agli altri, (oltre a me)
-
10 Maggio 2006 alle 20:10 #38407petroPartecipante
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
-
10 Maggio 2006 alle 22:47 #38408SteveAglAmministratore del forum
Ottimo lavoro complimenti.
Cmq, metterlo su plugins-net già è un buon punto di partenza, intanto lo segnalo nel blog, poi magari segnalalo anche tu ad altri blog, tipo Blogging Pro.
-
14 Maggio 2006 alle 15:01 #38484
-
28 Gennaio 2007 alle 18:53 #43095nylonPartecipante
MrBrown… ho trovato il tuo PlugIn interessante e lo sto provando in locale sulla versione 2.1
se lo richiamo con la funzione <?php PM_articoli(‘X’,’Y’); ?> relativi ad una categoria figlia
nessun problema mentre se lo richiamo in una categoria madre, mi ritrovo tra i post di quella
categoria anche le ultime pagine pubblicate… Mi sapresti aiutare?
Mauro
-
22 Agosto 2007 alle 22:08 #46276dariodnPartecipante
io sto provando cosà¬:
<?php while (have_posts()) : the_post(); ?>
- <?php
$cats = array(3);
mp_posts_in_cat($cats,'5','post_title');
?>
<?php endwhile; ?>
cos’è che sbaglio?
-
22 Agosto 2007 alle 23:02 #46279SteveAglAmministratore del forum
prova con:
$cats = array('3');
OT: dariodn, per caso conosci Federica?
-
23 Agosto 2007 alle 8:32 #46283dariodnPartecipante
eheh… si, credo di conoscerla bene :p
cmq tornando it, non mi appare nulla…
-
23 Agosto 2007 alle 11:47 #46287SteveAglAmministratore del forum
allora, esattamente che cosa vuoi fare?
-
23 Agosto 2007 alle 12:11 #46288dariodnPartecipante
mostrare la lista degli ultimi N post della categoria con ID=X
-
23 Agosto 2007 alle 17:16 #46291dariodnPartecipante
dunque… ho trovato questo codice:
<?php $posts = get_posts( "category=4&numberposts=3" ); ?> <?php if( $posts ) : ?> <?php foreach( $posts as $post ) : setup_postdata( $post ); ?> " title="<?php the_title(); ?>"><?php the_title(); ?><?php endforeach; ?><?php endif; ?>
quello che ho scoperto è che se metto come ID della categoria una categoria “albero” non mi appaiono i post. Se invece metto quello di una sottocategoria, allora appaiono.
La questione è che, immaginavo, mettendo la categoria albero, dovrebbe mostrare i post delle varie sottocategorie…
-
23 Agosto 2007 alle 18:04 #46292SteveAglAmministratore del forum
mmmmm, no, in effetti prende solo i post che appartengono direttamente alla categoria di cui passi l’ID.
Cmq mi è venuto un dubbio: il codice che non ti funziona è uguale uguale a questo, o c’è un
echo
in meno?<?php
$cats = array(3);
echo mp_posts_in_cat($cats,'5','post_title');
?>
-
23 Agosto 2007 alle 20:14 #46299dariodnPartecipante
no, non c’era l’echo.
però in questo caso mi mostra cmq solo i post delle singole categorie o, nel caso di macrocategorie, lista tutti i sottocontenuti?
-
23 Agosto 2007 alle 20:36 #46300dariodnPartecipante
cmq, usato anche con echo e non funziona (né in categorie né in sottocategorie)
-
7 Novembre 2007 alle 18:19 #47774Mn3m0n1cPartecipante
Hey Mrbrown!
Mi sono accorto solo adesso della tua risposta (non avevo visto la seconda pagina), è uscita la versione aggiornata del plugin
Sempre qui
Ho modificato la query di questo utile plugin rendendolo compatibile con WP 2.3.x. Al momento è disponibile QUI, in attesa che il buon Petro lo aggiunga sul suo sito.
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.