Получать контент публикации из-за пределов цикла
Есть ли способ получить содержимое из другого вне цикла? Идентификатор 302, и мне нужно отобразить его содержимое на другой странице.
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;
Чтобы получить содержание поста вне цикла, вы можете написать что-то вроде этого
global $post;
$content = $post->post_content;
if ( !empty( $content ) ) :
echo $content;
endif;
Если ваш контент содержит короткие коды, вам следует использовать:
$post_id = 22;
$post_object = get_post( $post_id );
echo do_shortcode( $post_object->post_content );
Для полноты, основываясь на комментарии Тима выше и вдохновляясь статьей Стивена Харриса , решение, которое позволяет использовать the_content()
, заключается в следующем:
$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );
И, следовательно, применяются фильтры (будут вставлены абзацы и т.д.), и работают короткие коды.
Поскольку вы знаете свой идентификатор целевой записи (302), вам может пригодиться этот сокращенный синтаксис, который вы можете использовать вне цикла (хотя его производительность практически такая же, как и в любом другом альтернативном методе:)
echo(get_post_field('post_content',302));
Вы можете использовать функцию 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
?>
Вы можете использовать, как сказано, решение с 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 );
Искал то же самое, я удивлен, что никто этого не сказал:
$pageID = 302;
echo get_the_content(null, false, $pageID);
Работает хорошо! :)
Вы можете просто вызвать get_the_content(postID)
<?php echo get_the_content($postId); ?>
Используйте 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 - ваш почтовый идентификатор.. Надеюсь, это сработает.
Вы можете поместить контент в категорию X и использовать query_post до того, как это произойдет:
<?php query_posts('cat=X&showposts=1'); ?>
<?php while (have_posts()) : the_post(); ?>
<?= get_the_content(); ?>
<?php endwhile; ?>