Получать контент публикации из-за пределов цикла


Есть ли способ получить содержимое из другого вне цикла? Идентификатор 302, и мне нужно отобразить его содержимое на другой странице.

Author: Chip Bennett, 2012-05-10

11 answers

Вы можете использовать get_page() чтобы вернуть объект $post статической страницы:

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

Редактировать

Аналогичным образом, вы можете использовать get_post() чтобы вернуть объект $post сообщения:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
 43
Author: Chris_O, 2020-06-15 08:21:38

Чтобы получить содержание поста вне цикла, вы можете написать что-то вроде этого

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

if ( !empty( $content ) ) :
    echo $content;
endif;
 7
Author: Aamer Shahzad, 2014-09-14 15:40:41

Если ваш контент содержит короткие коды, вам следует использовать:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
 3
Author: DSI_ClasH, 2014-03-23 17:35:01

Для полноты, основываясь на комментарии Тима выше и вдохновляясь статьей Стивена Харриса , решение, которое позволяет использовать the_content(), заключается в следующем:

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

И, следовательно, применяются фильтры (будут вставлены абзацы и т.д.), и работают короткие коды.

 1
Author: Jon, 2015-12-06 21:00:50

Поскольку вы знаете свой идентификатор целевой записи (302), вам может пригодиться этот сокращенный синтаксис, который вы можете использовать вне цикла (хотя его производительность практически такая же, как и в любом другом альтернативном методе:)

echo(get_post_field('post_content',302));
 0
Author: E. Serrano, 2015-06-24 21:26:56

Вы можете использовать функцию get_post_data(), чтобы вывести сообщение за пределы цикла. Поместите этот код в functions.php

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

А затем добавьте этот фрагмент для большего контроля над процессом

<?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
?>
 0
Author: Zohair Baloch, 2016-02-08 15:57:09

Вы можете использовать, как сказано, решение с get_post и $post_object->post_content, но не забудьте добавить проверку перед использованием этого объекта post:

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 );
 0
Author: Olga Farber, 2017-03-01 07:22:11

Искал то же самое, я удивлен, что никто этого не сказал:

$pageID = 302;

echo get_the_content(null, false, $pageID);

Работает хорошо! :)

 0
Author: Loosie94, 2020-11-04 15:58:38

Вы можете просто вызвать get_the_content(postID)

<?php echo get_the_content($postId); ?>
 -1
Author: NiemBlackPine, 2016-04-20 19:43:37

Используйте wp_reset_postdata(); это будет работать.. (отредактировано)

<?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();
?>

Тип сообщения может быть "сообщение", "страница" или ваш пользовательский тип сообщения. Здесь p=302 - ваш почтовый идентификатор.. Надеюсь, это сработает.

 -2
Author: Jahirul Islam Mamun, 2017-03-29 06:31:17

Вы можете поместить контент в категорию X и использовать query_post до того, как это произойдет:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
 -3
Author: Zakaria Elhariri, 2012-05-10 11:20:49