Obtener el contenido de una entrada desde fuera del bucle

10 may 2012, 13:44:07
Vistas: 72.2K
Votos: 26

¿Hay alguna manera de obtener el contenido de otra entrada desde fuera del bucle? El ID es 302 y necesito mostrar ese contenido en otra página.

1
Comentarios

¿No conoces el ID? ¡Utiliza get_queried_object_id()! https://developer.wordpress.org/reference/classes/wp_query/get_queried_object_id/

jave.web jave.web
12 abr 2016 19:13:52
Todas las respuestas a la pregunta 11
3
45

Puedes usar get_page() para devolver el objeto $post de una página estática:

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

Editar

De manera similar, puedes usar get_post() para devolver el objeto $post de una entrada:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
10 may 2012 14:15:47
Comentarios

¿Los shortcodes aún funcionan al usar esto?

Tim Baas Tim Baas
20 feb 2014 23:35:35

Acabo de descubrir que no. Usa setup_postdata( $post ); primero, después de eso, puedes usar the_content();

Tim Baas Tim Baas
20 feb 2014 23:39:28

Podrías simplemente ejecutar apply_filters( 'the_content', $post_object->post_content );

Nathan Powell Nathan Powell
1 mar 2017 09:30:10
3

para obtener el contenido de la publicación fuera del bucle (loop) puedes escribir algo como esto

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

if ( !empty( $content ) ) :
    echo $content;
endif;
14 sept 2014 18:40:41
Comentarios

global $post solo está disponible dentro del bucle (loop), que es el punto central de la pregunta

dtw dtw
7 jun 2023 12:37:23

No, esto está disponible fuera del bucle. Es una variable global y contiene los datos de la publicación actual. https://codex.wordpress.org/Global_Variables

Aamer Shahzad Aamer Shahzad
12 jun 2023 10:15:24

Disculpa, mi comentario no fue lo suficientemente claro. Sí, es una variable global, pero ten en cuenta que está en la sección titulada "Variables dentro del bucle (Inside the Loop variables)", que dice "Mientras está dentro del bucle, estas variables globales se establecen, conteniendo información sobre la publicación actual que se está procesando."

Si tu código se ejecuta en una página antes del bucle, ¿qué $post va a devolver?

Además, el OP quiere obtener el contenido para una publicación que NO es la publicación actual, así que ni siquiera tiene sentido en este caso.

dtw dtw
13 jun 2023 14:51:32
1

Estaba buscando lo mismo, me sorprende que nadie haya mencionado esto:

$pageID = 302;

echo get_the_content(null, false, $pageID);

¡Funciona bien! :)

4 nov 2020 17:58:38
Comentarios

¡Simple pero elegante!

Faisal Ashfaq Faisal Ashfaq
20 ago 2021 21:19:35
3

Si tu contenido incluye shortcodes, deberías usar:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
23 mar 2014 19:29:33
Comentarios

No uses shortcode https://kovshenin.com/2013/dont-do_shortcode/

Brad Dalton Brad Dalton
25 jun 2015 00:52:50

Esa página no proporciona una razón convincente para evitar do_shortcode aparte de decir "Podría ser lento" y "Puedes simplemente usar la función que llama el shortcode". Esas razones solo son válidas para los escenarios más triviales y simples. Fallan 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, estaría en desacuerdo con la afirmación de evitar do_shortcode. Esto huele a optimización prematura.

Jeff Jeff
18 abr 2017 00:35:50

Y también aumenta el acoplamiento entre tu código y el código original del shortcode. Si el método subyacente del shortcode alguna vez cambia de nombre o su firma cambia, tu código se romperá.

Jeff Jeff
18 abr 2017 00:37:21
1

Para completar, basándonos en el comentario de Tim anteriormente y inspirado por el artículo de Stephen Harris, la solución que permite usar 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 shortcodes funcionarán.

23 may 2014 10:07:01
Comentarios

Esto casi hizo que mi navegador se bloqueara :/ quitar el ampersand ayuda, pero todavía no está analizando los shortcodes.

Zade Zade
5 oct 2015 11:12:53
0

Puedes usar, como se mencionó, la solución con get_post y $post_object->post_content, pero no olvides agregar una verificación 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 ''; }
    // sino

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

echo get_post_content( $other_post_id );
1 mar 2017 09:22:11
0

Si conoces el ID de la publicación objetivo (302), puede resultarte útil esta sintaxis abreviada que puedes utilizar fuera del bucle (aunque su rendimiento es prácticamente el mismo que en cualquier otro método alternativo):

echo(get_post_field('post_content',302));
25 jun 2015 00:26:56
0

Puedes usar la función get_post_data() para obtener un post fuera del loop. Coloca este código en el archivo functions.php

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

y luego añade este fragmento para tener más control sobre el proceso

<?php $data = get_post_data(302);
    echo $data->post_date;     // fecha del post
    echo $data->post_title;    // título del post  
    echo $data->post_content;  // contenido del post
    echo $data->comment_count; // número de comentarios
?>
8 feb 2016 17:57:09
1
-1

Puedes simplemente llamar a get_the_content(postId)

<?php echo get_the_content($postId); ?>
20 abr 2016 22:43:37
Comentarios

En realidad, eso no es posible. El primer argumento ahí es para el contenido cuando hay un enlace "leer más": https://codex.wordpress.org/Function_Reference/get_the_content

joshcanhelp joshcanhelp
25 ago 2017 01:40:31
3
-2

usa wp_reset_postdata(); y 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 tu tipo de entrada personalizado. Aquí p=302 es el ID de tu entrada.. Espero que funcione.

4 abr 2015 09:20:21
Comentarios

Nunca uses query_posts a menos que necesites romper funcionalidades de la página. Siempre utiliza WP_Query o get_posts para consultas personalizadas :-)

Pieter Goosen Pieter Goosen
4 abr 2015 09:55:33

sí.. tienes razón.. También se puede usar WP_Query.. se obtienen los mismos resultados..

Jahirul Islam Mamun Jahirul Islam Mamun
5 abr 2015 22:23:31

También está el filtro pre_get_posts, y the_post. Tanto detalle.

Nathan Powell Nathan Powell
1 mar 2017 09:35:36
0
-3

puedes colocar contenido en una categoría X y usar query_post antes del while así:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
10 may 2012 14:20:49