Usar the_excerpt() en una página

15 may 2012, 00:50:17
Vistas: 985
Votos: 0

He estado intentando utilizar la función de extracto de PHP para llamar desde su publicación de blog más reciente para publicar en una página de destino principal sin éxito. ¿Alguna idea?

<div id="home_news" class="prefix_9 grid_3">
    <div id="newsbox" style="display: block;">
        <div id="news">
            <h2>Bienvenido</h2>
            <div id="news_content">Bienvenido a... .vuelve pronto para ver una nueva selección de pinturas al óleo, últimas impresiones y tarjetas de felicitación</a>. 

<?php 
$my_query = new WP_Query('category_name=blog&posts_per_page=1'); 

while ($my_query->have_posts()) : $my_query->the_post(); 

    $do_not_duplicate = $post->505;
    the_excerpt();

endwhile; ?> 

            </div>
        </div>
    </div>
</div>
0
Todas las respuestas a la pregunta 2
19

the_excerpt() no funcionará en una página de destino. Debe usarse dentro del bucle de publicaciones para que funcione.

Dentro del bucle, WordPress llena una variable global $post con información sobre la publicación actual. Luego, varias etiquetas de plantilla hacen referencia a esa variable global y muestran contenido.


Basado en tus ediciones anteriores...

Tienes el bucle casi estructurado correctamente. Pero en su lugar, necesitarás:

  1. Crear tu propia consulta de página para obtener la última publicación
  2. Mostrar la publicación
  3. Restaurar la consulta original

El código a continuación debería hacer lo que necesitas:

<div id="home_news" class="prefix_9 grid_3">
    <div id="newsbox" style="display: block;">
        <div id="news">
            <h2>Bienvenido</h2>
            <div id="news_content">Bienvenido a... .vuelve pronto para ver una nueva selección de pinturas al óleo, últimas impresiones y tarjetas de felicitación</a>. 

<?php 
// Crear una nueva consulta y obtener la última publicación de la categoría "blog"
$my_query = new WP_Query( 'category_name=blog&posts_per_page=1' ); 

// Si tenemos una publicación, llenar las variables globales necesarias y ejecutar el bucle
if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); 

    // Mostrar el extracto de la publicación en la página
    the_excerpt();

endwhile; endif;

// Restablecer los datos del bucle principal para que las variables globales tengan los valores correctos
wp_reset_postdata();
?> 

            </div>
        </div>
    </div>
</div>
15 may 2012 01:16:57
Comentarios

Gracias por tu respuesta. ¿Es posible agregar el bucle dentro de una página? He estado probando con ello... Sin éxito todavía.

Charles Charles
15 may 2012 16:02:57

Sí. Echa un vistazo a los ejemplos de bucles múltiples en el Codex.

EAMann EAMann
15 may 2012 16:41:38

Edite mi pregunta porque no pude hacer que el formato markdown apareciera en mi comentario. ¿Se necesita especificar post->ID? ¿Es ID una variable global con nombre?

Charles Charles
17 may 2012 02:26:31

Después de llamar a the_post(), se llena una variable global $post que tiene un miembro ID.

EAMann EAMann
17 may 2012 06:46:02

Vale–¿entonces reemplazo el ID con el número de la publicación?

Charles Charles
17 may 2012 15:50:31

¿Cómo encuentro el ID numérico de la página específica?

Charles Charles
17 may 2012 16:01:46

get_the_ID() devuelve el ID numérico del post actual cuando se usa dentro del loop.

EAMann EAMann
17 may 2012 18:19:23

He añadido el valor numérico. Sin éxito. ¿Alguna otra idea? ¿Alguna recomendación sobre cómo solucionar el problema?

Charles Charles
17 may 2012 20:22:35

Mira mis ediciones. Dentro del loop (donde tengo the_excerpt()) puedes ejecutar cualquiera de las etiquetas de plantilla estándar que necesites. Si necesitas el ID numérico, ejecuta get_the_ID() para devolverlo o the_ID() para hacer echo. Si necesitas el título, usa get_the_title() como siempre.

EAMann EAMann
17 may 2012 21:38:38

Teóricamente, el código anterior debería validarse y funcionar. Tengo una categoría titulada 'blog'. Tengo un poco de miedo de estropear alguna de las ediciones. He dejado el código tal cual y lo he introducido en la página, pero aún no se renderiza. ¿Hay algo más que necesite hacer?

Charles Charles
18 may 2012 00:53:44

Mirando tu sitio, parece que el PHP no se está analizando... así que mi pregunta es, ¿dónde estás colocando este código?

EAMann EAMann
18 may 2012 00:59:01

Estoy aplicando el código dentro de una página. En la sección HTML.

Charles Charles
18 may 2012 17:31:09

OK, por eso no funciona. El código PHP se elimina en el editor HTML/Visual de WordPress. Necesitas agregar este código directamente a la plantilla de página utilizada por la página de destino o instalar un plugin de ejecución PHP en WordPress para que el código PHP en línea se ejecute.

EAMann EAMann
18 may 2012 18:34:42

Entendido. Casi lo tengo. Excepto que ahora estoy encontrando otro error... ¿Alguna idea? http://www.chazsouthard.com/art/

Charles Charles
18 may 2012 21:15:39

Error tipográfico en mi código (ahora corregido arriba). Debería ser wp_reset_postdata()

EAMann EAMann
18 may 2012 21:16:35

Ahora está funcionando, pero entra en conflicto con el CSS. ¿Hay alguna manera de limitar la cantidad de caracteres en el extracto? Creo que eso es lo que está desajustando el código.

Charles Charles
19 may 2012 17:14:23

Lee sobre Controlar la longitud del extracto usando filtros.

EAMann EAMann
19 may 2012 19:15:38

Finalmente lo resolví. Gracias por permanecer conmigo durante la confusión. ¿Hay alguna manera de publicar correctamente una miniatura dentro del extracto?

Charles Charles
20 may 2012 02:31:40

No ... pero eso no significa que no puedas publicar una miniatura + un extracto en una plantilla. Pero esa es una pregunta aparte, así que realmente deberías abrir una nueva pregunta ...

EAMann EAMann
20 may 2012 07:02:12
Mostrar los 14 comentarios restantes
0

Aunque esto no estaba claro en el post original al principio, creo que podría ser una buena solución. Simplemente crea un shortcode para colocar el extracto en el cuerpo. (Esta es una mala idea si quieres esto en cada página. Es una buena idea si lo quieres ocasionalmente en algunas páginas dentro del cuerpo).

Aquí está el código para colocar en tu functions.php:

function the_excerpt_shortcode() {
    return get_the_excerpt();
}
add_shortcode( 'the_excerpt', 'the_excerpt_shortcode' );

Una vez que tengas esto, simplemente coloca esto en el cuerpo de tu página:

[the_excerpt]

Y estarás listo para usarlo.

Si estás usando Twenty Ten, Twenty Eleven o algún otro tema que utilice el filtro excerpt_more, puede que necesites modificar ese shortcode para eliminar el enlace automático "Continuar leyendo...", pero para muchos temas esto no es necesario. Considera esto como un punto de partida.

18 may 2012 22:08:53