Obtenga contenido de publicaciones fuera del bucle

Respuestas:

39

Puede usar get_page()para devolver el $postobjeto de una página estática:

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

Editar

Del mismo modo, puede usar get_post()para devolver el $postobjeto de una publicación:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
Chris_O
fuente
¿Todavía funcionan los shortcodes cuando se usa esto?
Tim Baas
Me acabo de enterar que no. Use setup_postdata( $post );primero, después de eso, puede usarthe_content();
Tim Baas
44
Podrías correrapply_filters( 'the_content', $post_object->post_content );
Nathan Powell el
6

para obtener el contenido de la publicación fuera del ciclo, puede escribir algo como esto

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;
Aamer Shahzad
fuente
3

Si su contenido incluye códigos cortos, debe usar:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
DSI_ClasH
fuente
No haga shortcode kovshenin.com/2013/dont-do_shortcode
Brad Dalton
Esa página no proporciona una razón convincente para evitar, do_shortcodeaparte de decir: "Puede ser lento" y "Puede usar la función que llama el código corto". Esas razones solo son válidas para los más triviales para los escenarios más simples. Falla cuando el shortcode se genera en otro lugar, o si hay múltiples shortcodes o shortcodes mezclados con otro contenido y marcado. Sin una razón convincente, no estaría de acuerdo con la declaración para evitar do_shortcode. Esto huele a optimización prematura .
Jeff
Y también aumenta el acoplamiento entre su código y el código del shortcode original. Si el método de respaldo del shortcode cambia de nombre o la firma cambia, su código se romperá.
Jeff
1

Para completar, basándose en el comentario anterior de Tim e inspirado en el artículo de Stephen Harris , la solución que permite el uso the_content()es:

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

Y, por lo tanto, los filtros se aplican (se insertarán párrafos, etc.) y los códigos cortos funcionan.

Jon
fuente
Esto casi bloquea mi navegador: / sacar el ampersand ayuda, pero todavía no está analizando códigos cortos.
Zade
0

Como conoce su ID de publicación de destino (302), puede encontrar útil esta sintaxis abreviada que puede usar fuera del ciclo (aunque su rendimiento es prácticamente el mismo que en cualquier otro método alternativo :)

echo(get_post_field('post_content',302));
E. Serrano
fuente
0

Puede usar la get_post_data()función para obtener publicaciones fuera del ciclo. Coloque este código en functions.php

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

y luego agregue este fragmento para tener más control sobre el proceso

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>
Zohair Baloch
fuente
0

Puede usar, como se dijo, la solución con get_posty $post_object->post_content, pero no olvide agregar un cheque antes de usar ese objeto de publicación:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );
Olga Farber
fuente
-2

usarlo wp_reset_postdata();funcionará ... (editado)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

posttype puede ser "post", "page" o su tipo de publicación personalizada. Aquí p = 302 es su id de publicación. Espero que funcione.

Jahirul Islam Mamun
fuente
2
Nunca lo use a query_postsmenos que necesite romper las funcionalidades de la página. Utilice siempre WP_Queryo get_postspara consultas personalizadas :-)
Pieter Goosen
sí ... tienes razón ... Puede Wp_Query también ... mismo resultado encontrado ...
Jahirul Islam Mamun
También está el pre_get_postsfiltro, y the_post. Tanto detalle
Nathan Powell
-3

puede poner contenido en una categoría X y usar query_post antes mientras hace esto:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Zakaria Elhariri
fuente