• User Newbie

    richiamare post di una determinata categoria - una categoria per ogni pagina

    ciao a tutti...
    sto impazzendo, da stamattina avrò installato 5mila plugins...
    vi spiego quello che vorrei, non mi sembra poi tanto pretenzioso 😞

    dunque, la homepage del mio blog è un susseguirsi di articoli (ovviamente), con tag e categorie

    esistono poi delle pagine (statiche) in cui vorrei inserire (anche, non solo, quindi non consigliatemi di utilizzare direttamente la pagina della categoria perchè non va bene) gli ultimi post di una determinata categoria.

    faccio un esempio:
    scrivo degli articoli con tag (ma anche categoria...quello che volete, purchè funzioni!) "gatti", "cani", "pesci"
    poi nella pagina "gatti" vorrei apparissero i post con il tag (o categoria) "gatti", nella pagina "cani" i post con tag (o categoria) "cani" e così via.
    dovrebbero essere link ai post, con un paio di righe di articolo, e magari (ma non è necessario) una thumbnail della prima immagine presente.

    i problemi più frequenti che riscontro sono:

    • se utilizzo il codice get_post a parte la "povertà" dal punto di vista estetico, non sono link e riportano gran parte dell'articolo

    • molti sono widget per le sidebar, a me serve di inserirle nelle pagine

    • devo poterne inserire uno per pagina, ma ognuno che richiami una specifica e sola categoria. altrimenti mi ritrovo cani, gatti e pesci tutti mischiati 🙂

    avete qualcosa (di non troppo difficile) da suggerirmi?
    😞


  • User Attivo

    Non mi è chiaro come "selezioni" la categoria che deve apparire su quella pagina... La pagina "gatti" deve mostrare oltre al suo testo (scritto nell'editor pagina) anche un elenco di post della categoria "gatti"? quindi titolo pagina=titolo gategoria? Oppure vuoi poter scegliere pagina per pagina di volta in volta quale categoria far apparire?

    Stefano


  • User Newbie

    @WordPressMania said:

    Non mi è chiaro come "selezioni" la categoria che deve apparire su quella pagina... La pagina "gatti" deve mostrare oltre al suo testo (scritto nell'editor pagina) anche un elenco di post della categoria "gatti"? quindi titolo pagina=titolo gategoria? Oppure vuoi poter scegliere pagina per pagina di volta in volta quale categoria far apparire?

    Stefano

    diciamo che potrei anche far coincidere nome pagina e nome categoria... non credo ci sarebbero problemi. Ma comunque una volta scelta la categoria sarà quella punto, in secula seculorum, non andrà mai cambiata.

    se vuoi un esempio concretissimo (basta cani e gatti) vai su uglrieti.it

    la homepage è una serie di articoli

    vorrei "semplicemente" che una volta aperta una pagina, ad esempio "giovani" (nel sottomenù di "categorie") prima del testo che spiega chi siamo, che facciamo etc etc ci sia un riquadro con gli ultimi articoli di una determinata categoria/tag.

    non so se sono riuscita a spiegarmi bene :mmm:


  • User Attivo

    Chiarissimo!

    la soluzione secondo me più semplice e flessibile è quella di usare un template di pagina modificato adeguatamente e un campo personalizzato per indicare da quale categoria prendere il post che vuoi elencare.
    Una soluzione del genere è descritta sul Codex di WP: http://codex.wordpress.org/Pages#A_Page_of_Posts

    Provo a darti un esempio, non ti assicuro che funzionerà a primo colpo, non l'ho testato, ma l'idea è questa:

    • Innanzitutto crea un template di pagina Per farlo copia il file page.php che trovi nella directory del tuo tema rinominandola template-pagina-con-post.php
    • Apri il nuovo file appena creato e aggiungi all'inizio il codice per far sì che WP lo individui tra i template che puoi applicare:

    [INDENT][php]<?php /* Template Name: Pagina Con Post*/ ?> [/php][/INDENT]

    • Ora individua la fine del loop della pagina, e inserisci il codice che recupererà dal campo personalizzato il nome della categoria che ti serve:

    [INDENT][php]
    <?php
    if (is_page() ) {
    $category = get_post_meta($posts[0]->ID, 'category', true);
    }
    if ($category) {
    $cat = get_cat_ID($category);
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $post_per_page = 10; // -1 per mostrare tutti i post
    $do_not_show_stickies = 1; // 0 to show stickies

    $args=array(
    'category__in' => array($cat), 'orderby' => 'date', 'order' => 'DESC', 'paged' => $paged, 'posts_per_page' => $post_per_page, 'caller_get_posts' => $do_not_show_stickies ); ?>
    [/php][/INDENT]

    • Ora aggiungi il codice per recuparere i post che ti servono, lo puoi mettere di seguito al precedente. L'impaginazione dei post ovviamente andrà sistemata, modificata, ma tieni conto che dentro a questo nuovo loop hai a disposizione tutte le info che avresti in un normale loop quindi info su autore, thumbnail, excerpt, ecc ecc

    [INDENT][php]
    $wp_query = null;
    $wp_query = new WP_Query($args);
    if( have_posts() ) :
    while ($wp_query->have_posts()) :
    $wp_query->the_post(); ?>
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
    <div class="entry">
    <?php the_content('Read the rest of this entry »'); ?> </div>
    <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?>
    Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p> </div>
    <?php endwhile; ?>
    <div class="navigation">
    <div class="alignleft"><?php next_posts_link('« Older Entries') ?></div> <div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div> </div>

    <?php else : ?>
    <h2 class="center">Not Found</h2>
    <p class="center">Sorry, but you are looking for something that isn't here.</p>
    <?php get_search_form(); ?>
    <?php endif; [/php][/INDENT]

    • alla fine ricordati di chiudere quell' [php]if ($category) [/php] che abbiamo aperto all'inizio:

    [INDENT][php]} // if ($category) ?>[/php]
    [/INDENT]

    • Ora vai nell'editor delle pagine. Selezioni una pagina da modificare. Selezioni come template da applicare questo nuovo "Pagina con Post".
    • Aggiungi nei campi personalizzati un campo con chiave "category" e come valore il nome della categoria di cui vuoi elencare i post.
    • Salvi e dovresti avere il risultato atteso...

    ...più o meno... 😉

    Stefano, wordpressmania.it


  • User Newbie

    Parse error: syntax error, unexpected T_ENDWHILE in /var/www/virtual/uglrieti.it/htdocs/wp-content/themes/celestial-aura.2.2/celestial-aura/template-pagina-con-post.php.php on line 43

    credo di aver combinato qualche pasticcio 😄
    adesso riprovo tutto da capo... vediamo se riesco 🙂

    ti spiego passo passo quello che faccio, così mi dici dove combino guai 😮

    questo è il contenuto del file page.php del mio template

    [PHP]<?php get_header(); ?>
    <?php include (TEMPLATEPATH . '/sidebarLeft.php'); ?>

    <div id="content">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post" id="post-<?php the_ID(); ?>">
    <h1 class="post"><?php the_title(); ?></h1>
    <p> <?php edit_post_link(( 'Edit', 'default' ), '', ''); ?></p>
    <div class="entry">
    <div class="article"><?php the_content((
    ( 'Continue Reading »', 'default')) . the_title('', '', false)); ?></div>
    <?php wp_link_pages(); ?>
    </div>
    </div>

    <?php comments_template('', true); ?>
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
    </div>

    <?php include (TEMPLATEPATH . '/sidebarRight.php'); ?>
    <?php get_footer(); ?>
    </div><!--/Wrapper-->
    <div id="footershadow"></div>
    </div><!--/Container-->
    </body>
    </html>[/PHP]

    ho appena scoperto che il loop (qualsiasi cosa sia) in questo caso è:

    [PHP]<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post" id="post-<?php the_ID(); ?>">
    <h1 class="post"><?php the_title(); ?></h1>
    <p> <?php edit_post_link(( 'Edit', 'default' ), '', ''); ?></p>
    <div class="entry">
    <div class="article"><?php the_content((
    ( 'Continue Reading »', 'default')) . the_title('', '', false)); ?></div>
    <?php wp_link_pages(); ?>
    </div>
    </div>

    <?php comments_template('', true); ?>
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>[/PHP]

    Riesco a fare tutte le modifiche, ed il risultato è:

    [PHP]<?php /* Template Name: Pagina Con Post*/ ?>
    <?php get_header(); ?>
    <?php include (TEMPLATEPATH . '/sidebarLeft.php'); ?>

    <div id="content">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="post" id="post-<?php the_ID(); ?>">
    <h1 class="post"><?php the_title(); ?></h1>
    <p> <?php edit_post_link(( 'Edit', 'default' ), '', ''); ?></p>
    <div class="entry">
    <div class="article"><?php the_content((
    ( 'Continue Reading »', 'default')) . the_title('', '', false)); ?></div>
    <?php wp_link_pages(); ?>
    </div>
    </div>

    <?php comments_template('', true); ?>
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php
    if (is_page() ) {
    $category = get_post_meta($posts[0]->ID, 'category', true);
    }
    if ($category) {
    $cat = get_cat_ID($category);
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $post_per_page = 3; // -1 per mostrare tutti i post
    $do_not_show_stickies = 1; // 0 to show stickies

    $args=array(
    'category__in' => array($cat), 'orderby' => 'date', 'order' => 'DESC', 'paged' => $paged, 'posts_per_page' => $post_per_page, 'caller_get_posts' => $do_not_show_stickies ); ?>
    $wp_query = null;
    $wp_query = new WP_Query($args);
    if( have_posts() ) :
    while ($wp_query->have_posts()) :
    $wp_query->the_post(); ?>
    <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    <small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
    <div class="entry">
    <?php the_content('Read the rest of this entry »'); ?> </div>
    <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?>
    Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p> </div>
    <?php endwhile; ?>
    <div class="navigation">
    <div class="alignleft"><?php next_posts_link('« Older Entries') ?></div> <div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div> </div>

    <?php else : ?>
    <h2 class="center">Not Found</h2>
    <p class="center">Sorry, but you are looking for something that isn't here.</p>
    <?php get_search_form(); ?>
    <?php endif;
    <?php endif; ?>
    </div>

    <?php include (TEMPLATEPATH . '/sidebarRight.php'); ?>
    <?php get_footer(); ?>
    </div><!--/Wrapper-->
    <div id="footershadow"></div>
    </div><!--/Container-->
    </body>
    </html>[/PHP]

    l'unica cosa che non ho capito è dove devo inserire

    [PHP]} // if ($category) ?> [/PHP]

    l'ho messo appena prima della fine del loop, credo sia questo a darmi l'errore...
    che ne dici?


  • User Newbie

    Ma nessuno mi aiuta? sono ad un passo dalla salvezza :arrabbiato:


  • Super User

    Io proverei il plugin Post Page Associator