Mostrar entradas por etiqueta en una página

6 jul 2012, 04:34:56
Vistas: 29.2K
Votos: 3

Estoy tratando de crear una página avanzada en WordPress que muestre el contenido regular, más una segunda sección en la misma página que muestre las últimas entradas de una etiqueta X. Por ejemplo, se crea una página sobre "gatos", tiene imágenes, contenido, etc. Después, me gustaría mostrar las últimas X entradas etiquetadas con "gatos". ¿Es posible hacer esto sin usar plugins y sin crear una plantilla de página personalizada para cada página?

Quizás sea posible hacerlo con la función de campos personalizados y múltiples bucles. Por ejemplo, obtener X cantidad de entradas desde un campo personalizado con el valor "gatos". He estado luchando con esto durante un tiempo y no puedo encontrar una solución que no implique crear una plantilla para cada página individual.

¡Gracias!

4
Comentarios

De hecho, hice una pregunta similar en el pasado. Echa un vistazo a esto: http://wordpress.stackexchange.com/q/50857/10691

its_me its_me
6 jul 2012 10:07:30

@AahanKrish ¿Pero puedes hacer que funcione con campos personalizados para llamar a las etiquetas?

Bill Bill
7 jul 2012 00:21:09

Eso puede ser posible, pero no sé cómo. :) Quizás quieras esperar un poco

its_me its_me
7 jul 2012 04:40:06

¿Estás diciendo que obtengas las últimas publicaciones de la misma lista de etiquetas actual? Es decir, al navegar por publicaciones etiquetadas como 'gatos', mostrar las últimas publicaciones etiquetadas/campo 'gatos' (etiquetadas o campo).

Puedes obtener la consulta actual y usar get_posts().[http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters]

Diana Diana
19 jul 2012 00:09:44
Todas las respuestas a la pregunta 3
0

Esto debería funcionar. Comprobará si hay publicaciones que hayan sido etiquetadas con el título de la página actual. No es necesario usar if (have_posts()): en una plantilla de página: si se llama a la plantilla será porque hay una publicación :)

<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>

<!-- Obtener la publicación más reciente que ha sido etiquetada con el título de la página -->
<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>¡Lo sentimos, no hay publicaciones con esta etiqueta!</p>
    <?php endif; wp_reset_query(); ?>

</div>

Si prefieres usar metadatos personalizados para agregar la 'etiqueta' a la página (en lugar de solo usar el título) podrías agregar un metabox personalizado a la página así. Agrega el siguiente código a tu functions.php (nota: esto agregará el metabox a todas las páginas)

/** registrar el metabox */
function my_theme_add_meta_boxes() {
    global $post;
    add_meta_box(
        'my-theme-meta',
        'Elige una etiqueta',
        'my_theme_print_page_meta',
        'page',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'my_theme_add_meta_boxes');
/** Agregar metadatos adicionales a la página */
function my_theme_print_page_meta() {
    global $post;
    $page_tags = get_post_meta($post->ID, '_page-tags', true);
    ?>
    <label for="page-tags">Agregar una 'etiqueta'</label>
    <input type="text" class="page-tags" name="page-tags" value="<?php echo esc_attr($page_tags); ?>" />
    <?php
}
/** Guardar metadatos personalizados */
function my_theme_save_custom_meta() {
    global $post;

    // Evita que WP borre los metadatos al autoguardar
    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');

Entonces tu código en page.php podría verse así:

<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): ?>

<!-- Obtener la publicación más reciente etiquetada con el título de la página -->
<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>¡Lo sentimos, no hay publicaciones con esta etiqueta!</p>
    <?php endif; wp_reset_query(); ?>

</div>

<?php endif; // Hay 'etiquetas de página' ?>
11 nov 2012 15:13:05
2

Realiza una WP_Query en la segunda parte de tu página:

<!-- Primera parte de tu página -->
<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>

<!-- Y ahora llamas a WP_Query() -->
<div class="secondcontent">

    <!-- Obtener la consulta principal -->
    <?php $wp_query = new WP_Query(array(
        'post_type' => 'post'
    ));?>

    <!-- Y puedes usarla como arriba -->
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
        <p><?php the_title(); ?><p>
        <p><?php the_content(); ?><p>
    <?php endwhile; endif;?>

</div>

Actualmente estoy trabajando con un tema en WordPress, y estoy haciendo esto exactamente, ¡así que funciona!

6 sept 2012 12:03:37
Comentarios

¿Puedes darme un ejemplo en código?

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

sí, espera dos minutos, lo estoy escribiendo

JeanDavidDaviet JeanDavidDaviet
6 sept 2012 14:12:04
0

Ya hay respuestas anteriores sobre cómo usar bucles, así que no añadiré más acerca de wp get recent posts o Parámetros de Taxonomía.

Pero quizá quieras considerar envolver tu código en un Widget, lo que haría más fácil añadirlo a tus plantillas existentes.

28 nov 2015 22:09:42