Есть ли способ получить контент из другого цикла? Идентификатор 302, и мне нужно отобразить его содержимое на другой странице.
Есть ли способ получить контент из другого цикла? Идентификатор 302, и мне нужно отобразить его содержимое на другой странице.
Ответы:
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;
setup_postdata( $post );
сначала, после этого вы можете использоватьthe_content();
apply_filters( 'the_content', $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 );
do_shortcode
других слов, кроме «Это может быть медленно» и «Вы можете просто использовать функцию, которую вызывает короткий код». Эти причины действительны только для самых тривиальных и самых простых сценариев. Сбой происходит, когда шорткод создается где-то еще, или если есть несколько шорткодов или шорткодов, смешанных с другим контентом и разметкой. Без веской причины я не согласился бы с утверждением, которого следует избегать do_shortcode
. Это пахнет преждевременной оптимизацией .
Для полноты, основываясь на комментариях Тима выше и вдохновленных статьей Стивена Харриса , решение, которое позволяет использовать 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 );
Вы можете просто вызвать 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();
?>
posttype может быть «post», «page» или ваш собственный тип записи. Здесь p = 302 - ваш пост ID. Надеюсь, это сработает.
query_posts
если вам не нужно нарушать функциональность страницы. Всегда используйте WP_Query
или get_posts
для пользовательских запросов :-)
pre_get_posts
фильтр, и the_post
. Так много деталей.
вы можете поместить контент в категорию X и использовать query_post до того момента как это:
<?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/…