Получить пост контент из цикла


22

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


Не знаете удостоверение личности? Используйте get_queried_object_id()! developer.wordpress.org/reference/classes/wp_query/…
jave.web

Ответы:


39

Вы можете использовать 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();
Тим Баас

4
Вы могли бы просто бежатьapply_filters( 'the_content', $post_object->post_content );
Натан Пауэлл

6

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

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

if ( !empty( $content ) ) :
    echo $content;
endif;

3

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

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


На этой странице нет веских причин избегать do_shortcodeдругих слов, кроме «Это может быть медленно» и «Вы можете просто использовать функцию, которую вызывает короткий код». Эти причины действительны только для самых тривиальных и самых простых сценариев. Сбой происходит, когда шорткод создается где-то еще, или если есть несколько шорткодов или шорткодов, смешанных с другим контентом и разметкой. Без веской причины я не согласился бы с утверждением, которого следует избегать do_shortcode. Это пахнет преждевременной оптимизацией .
Джефф

И это также увеличивает связь между вашим кодом и исходным кодом шорткода. Если метод поддержки шорткода будет когда-либо переименован или подпись изменится, ваш код сломается.
Джефф

1

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

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

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


Это почти сломало мой браузер: / удаляет амперсанд, помогает, но он по-прежнему не разбирает шорткоды.
Заде

0

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

echo(get_post_field('post_content',302));

0

Вы можете использовать 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

Как вы сказали, вы можете использовать решение с 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 );


-2

использовать 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. Надеюсь, это сработает.


2
Никогда не используйте, query_postsесли вам не нужно нарушать функциональность страницы. Всегда используйте WP_Queryили get_postsдля пользовательских запросов :-)
Pieter Goosen

да .. вы правы .. может и Wp_Query .. тот же результат найден ..
Джахирул Ислам Мамун

Существует также pre_get_postsфильтр, и the_post. Так много деталей.
Натан Пауэлл

-3

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

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.