Mostrare i post per tag sulla pagina

6 lug 2012, 04:34:56
Visualizzazioni: 29.2K
Voti: 3

Sto cercando di creare una pagina WordPress avanzata che mostri il contenuto normale, più una seconda sezione sulla stessa pagina che visualizzi gli ultimi post di un determinato tag. Ad esempio, viene creata una pagina sui "gatti", con immagini, contenuti, ecc. Successivamente, vorrei mostrare gli ultimi X post taggati con "gatti". È possibile farlo senza utilizzare plugin e senza creare un template di pagina personalizzato per ogni pagina?

Forse è fattibile con la funzionalità dei campi personalizzati e loop multipli. Ad esempio, ottenere X numero di post da un campo personalizzato con il valore "gatti". Ci sto lavorando da un po' e non riesco a trovare una soluzione che non implichi la creazione di un template per ogni singola pagina.

Grazie!

4
Commenti

In realtà ho già fatto una domanda simile in passato. Dai un'occhiata qui: http://wordpress.stackexchange.com/q/50857/10691

its_me its_me
6 lug 2012 10:07:30

@AahanKrish Ma riesci a farlo funzionare con i campi personalizzati per richiamare i tag?

Bill Bill
7 lug 2012 00:21:09

Potrebbe essere possibile, ma non so come. :) Potresti voler aspettare un po'

its_me its_me
7 lug 2012 04:40:06

Vuoi ottenere gli ultimi post dallo stesso elenco di tag corrente? Ad esempio, quando stai navigando tra i post con il tag 'gatti', mostrare gli ultimi post con il tag/campo 'gatti' (con tag o campo)?

Puoi ottenere la query corrente e usare get_posts().[http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters]

Diana Diana
19 lug 2012 00:09:44
Tutte le risposte alla domanda 3
0

Questo dovrebbe fare al caso tuo. Controllerà i post che sono stati taggati con il titolo della pagina corrente. Non c'è bisogno di usare if (have_posts()): in un template di pagina: se il template viene chiamato sarà perché c'è un post :)

<div class="page-loop">

    <?php
      while (have_posts()) : the_post();
        $page_title = strtolower(get_the_title());
        the_title('<h1>','</h1>');
      ?>
        <p><?php the_content(); ?><p>
    <?php endwhile;?>

</div>

<!-- Ottieni il post più recente che è stato taggato con il titolo della pagina -->
<div class="related-posts">

    <?php
      $args = array(
        'tag' => $page_title,
        'posts_per_page' => 1,
      );
      $query = new WP_Query($args);
      if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
          the_title('<h1>','</h1>');
        ?>
        <p><?php the_content(); ?><p>
    <?php endwhile; else: ?>
      <p>Spiacenti, nessun post con questo tag!</p>
    <?php endif; wp_reset_query(); ?>

</div>

Se preferisci usare dei meta personalizzati per aggiungere il 'tag' alla pagina (invece di usare semplicemente il titolo) potresti aggiungere un meta box personalizzato alla pagina in questo modo. Aggiungi il seguente codice al tuo functions.php (nota: questo aggiungerà il meta box a tutte le pagine)

/** registra il meta box */
function my_theme_add_meta_boxes() {
    global $post;
    add_meta_box(
        'my-theme-meta',
        'Scegli un tag',
        'my_theme_print_page_meta',
        'page',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'my_theme_add_meta_boxes');
/** Aggiungi meta extra alla pagina */
function my_theme_print_page_meta() {
    global $post;
    $page_tags = get_post_meta($post->ID, '_page-tags', true);
    ?>
    <label for="page-tags">Aggiungi un 'tag'</label>
    <input type="text" class="page-tags" name="page-tags" value="<?php echo esc_attr($page_tags); ?>" />
    <?php
}
/** Salva i meta del post */
function my_theme_save_custom_meta() {
    global $post;

    // Impedisce a WP di cancellare i meta del post durante l'autosalvataggio
    if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
      return $post->ID;
    }
    if (isset($_POST['page-tags'])) {
        $clean = sanitize_text_field($_POST['page-tags']);
        update_post_meta($post->ID, '_page-tags', $clean);
    }

}
add_action('save_post', 'my_theme_save_custom_meta');

Allora il tuo codice page.php potrebbe essere così:

<div class="page-loop">

    <?php
      while (have_posts()) : the_post();
        $page_tags = get_post_meta($post->ID, '_page-tags', true);
        the_title('<h1>','</h1>');
      ?>
        <p><?php the_content(); ?><p>
    <?php endwhile;?>

</div>

<?php if ($page_tags): ?>

<!-- Ottieni il post più recente che è stato taggato con il titolo della pagina -->
<div class="related-posts">

    <?php
      $args = array(
        'tag' => $page_tags,
        'posts_per_page' => 1,
      );
      $query = new WP_Query($args);
      if ($query->have_posts()) :
        while ($query->have_posts()) : $query->the_post();
          the_title('<h1>','</h1>');
        ?>
        <p><?php the_content(); ?><p>
    <?php endwhile; else: ?>
      <p>Spiacenti, nessun post con questo tag!</p>
    <?php endif; wp_reset_query(); ?>

</div>

<?php endif; // Ci sono 'tag di pagina' ?>
11 nov 2012 15:13:05
2

Esegui una WP_Query nella seconda parte della tua pagina:

<!-- Prima parte della tua pagina!-->
<div class="firstcontent">

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
        <p><?php the_title(); ?><p>
        <p><?php the_content(); ?><p>
    <?php endwhile; endif;?>

</div>

<!-- E ora chiami la WP_Query() !-->
<div class="secondcontent">

    <!-- ottieni la query principale !-->
    <?php $wp_query = new WP_Query(array(
        'post_type' => 'post'
    ));?>

    <!-- e puoi usarla come sopra !-->
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
        <p><?php the_title(); ?><p>
        <p><?php the_content(); ?><p>
    <?php endwhile; endif;?>

</div>

Sto attualmente lavorando con un tema su WordPress, e sto facendo proprio questa cosa, quindi funziona!

6 set 2012 12:03:37
Commenti

Puoi fornire un esempio in codice?

Brian Fegter Brian Fegter
6 set 2012 13:18:43

sì aspetta due minuti lo sto scrivendo

JeanDavidDaviet JeanDavidDaviet
6 set 2012 14:12:04
0

Ci sono già risposte sopra su come utilizzare i loop, quindi non aggiungerò altro riguardo a wp get recent posts o Parametri della Tassonomia.

Ma potresti voler considerare di racchiudere il tuo codice in un Widget, il che renderebbe più semplice l'aggiunta ai tuoi template esistenti.

28 nov 2015 22:09:42