Respuestas:
get_page()
para devolver el $post
objeto de una página estática:$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;
Del mismo modo, puede usar get_post()
para devolver el $post
objeto de una publicación:
$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
setup_postdata( $post );
primero, después de eso, puede usarthe_content();
apply_filters( 'the_content', $post_object->post_content );
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;
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 );
do_shortcode
aparte 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 .
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.
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));
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
?>
Puede usar, como se dijo, la solución con get_post
y $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 );
Simplemente puede llamar a get_the_content (postId)
<?php echo get_the_content($postId); ?>
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.
query_posts
menos que necesite romper las funcionalidades de la página. Utilice siempre WP_Query
o get_posts
para consultas personalizadas :-)
pre_get_posts
filtro, y the_post
. Tanto detalle
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; ?>
get_queried_object_id()
! developer.wordpress.org/reference/classes/wp_query/…