¿Cómo establecer posts destacados usando un checkbox en la pantalla de edición?

17 sept 2011, 22:42:46
Vistas: 15K
Votos: 7

Quiero que seleccionar un post destacado sea tan simple como marcar un checkbox en la pantalla de edición Y poder recuperar estos artículos destacados solo de una categoría específica.

En resumen, lo que busco:

  • Establecer post destacado

  • Recorrer los posts destacados en una categoría específica (no todos los posts)

¿Alguna ayuda? Y gracias de antemano :)

0
Todas las respuestas a la pregunta 2
7
10

Puedes hacer esto siguiendo estos pasos:

  1. Añade un meta box personalizado a tus entradas
  2. Crea una función para guardar los metadatos usando la acción save_post
  3. Añade el argumento de consulta 'meta_key' a cualquier consulta que estés utilizando.

Coloca esto en el archivo functions.php de tu tema:

function register_post_assets(){
    add_meta_box('featured-post', __('Entrada Destacada'), 'add_featured_meta_box', 'post', 'advanced', 'high');
}
add_action('admin_init', 'register_post_assets', 1);

function add_featured_meta_box($post){
    $featured = get_post_meta($post->ID, '_featured-post', true);
    echo "<label for='_featured-post'>".__('¿Destacar esta entrada?', 'foobar')."</label>";
    echo "<input type='checkbox' name='_featured-post' id='featured-post' value='1' ".checked(1, $featured)." />";
}

function save_featured_meta($post_id){
    // Realiza validaciones aquí para post_type, nonces, autoguardado, etc...
    if (isset($_REQUEST['_featured-post']))
        update_post_meta(esc_attr($post_id, '_featured-post', esc_attr($_REQUEST['_featured-post']))); 
        // Me gusta usar _ antes de mis campos personalizados, para que solo sean editables dentro de mi formulario y no en la UI normal de campos personalizados
}
add_action('save_post', 'save_featured_meta');

Luego, en tu archivo de plantilla usa lo siguiente para el loop principal:

    $args = array(
        'meta_key' => '_featured-post', // incluye el prefijo de guión bajo en el nombre de la clave
        'meta_value' => 1
    );
    // El número de entradas mostradas estaría determinado en Ajustes->Lectura
    query_posts($args);

    if(have_posts()): while(have_posts()): the_post();
        // Haz lo que necesites aquí

    endwhile; else:

    endif;

SÓLO A MODO DE EJEMPLO: Para loops personalizados (si ejecutas múltiples loops en una página), usarías esto:

    $args = array(
        'posts_per_page' => 5,
        'meta_key' => '_featured-post',
        'meta_value' => 1
    );

    $featured = new WP_Query($args);

    if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post();
        the_title();
        the_content();
    endwhile; else:

    endif;
18 sept 2011 04:58:35
Comentarios

¿Por qué ejecutarías una segunda (nueva) WP Query? ¿No sería suficiente verificar el valor meta?

kaiser kaiser
18 sept 2011 06:01:32

Nunca dije que crearas un segundo loop. Le estaba mostrando con fines de ejemplo si quisiera ejecutar múltiples loops en una página. El Codex indica usar query_posts para el loop principal y new WP_Query para un loop personalizado secundario. El malentendido no merecía un -1. :)

Brian Fegter Brian Fegter
18 sept 2011 06:21:37

Al revés. Por cierto: Mira esta respuesta. También cabe destacar que quizás la mejor opción es usar filtros para modificar la Query.

kaiser kaiser
18 sept 2011 08:08:09

Supongo que la mayoría de las implementaciones de publicaciones "destacadas" usarían un bucle secundario, en lugar del bucle principal, generalmente en forma de una lista de publicaciones destacadas, o un slider que muestre las publicaciones destacadas, etc.

Chip Bennett Chip Bennett
19 oct 2011 19:43:20

Solo una nota sobre el código que va en functions.php, creo que necesita un ")" adicional en la línea 15. ¿Es posible?

Peanuts Peanuts
4 jul 2013 20:13:53

Chicos, esto no está actualizando el campo personalizado para mí... ¿qué puede ser?

Peanuts Peanuts
4 jul 2013 21:05:14

@BrianFegter, sé que esta respuesta es muy antigua pero ahora no funciona. Quiero decir, obtengo la opción "¿Destacar esta publicación?" con una casilla de verificación en la página de la publicación (al final de la publicación), la seleccioné y actualicé lo cual funcionó perfectamente, pero ahora al mostrar en mi página las publicaciones seleccionadas, eso no está funcionando.

Naren Verma Naren Verma
14 nov 2019 11:00:10
Mostrar los 2 comentarios restantes
0

Intenté ejecutar este código y me ayudó mucho para mostrar mi publicación destacada en la página de inicio para mi tipo de publicación personalizada de estudios de caso. Muchas gracias.

         <?php $args = array( 
                'post_type' => 'case_studies',
                'posts_per_page' => 1,
                'meta_key' => 'featured_post',
                'meta_value' => 1
            );

            $featured = new WP_Query($args);

            if ($featured->have_posts()): while($featured->have_posts()): $featured->the_post(); ?>
                <div class="c-image"><?php the_post_thumbnail('large'); ?></div>
                <div class="cstext">
                     <article>
                        <h2><?php the_title(); ?></h2>  
                        <span class="sub-title"> USAF SOCONS </span>
                        <?php the_content(); ?>
                        <a href="<?php echo get_permalink(); ?>" class="readmore">Conoce más</a>
                    </article> 

                    <a href="/case-studies" class="btn-primary">Ver todos los estudios de caso</a>

                </div> 

            <?php 
                endwhile; 
                    else: 'No hay contenido agregado';
            endif; ?>
    </div>
</div>  

3 abr 2019 05:14:47