Отримуйте вміст публікації поза циклом


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

Не робіть короткий код kovshenin.com/2013/dont-do_shortcode
Бред Далтон,

Ця сторінка не дає вагомих причин, щоб уникнути, 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()функцію, щоб отримати повідомлення поза циклом. Розмістіть цей код у function.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, але не забудьте додати чек, перш ніж використовувати цей об’єкт поштового зв’язку:

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 може бути "повідомлення", "сторінка" або ваш власний тип публікації. Тут p = 302 - ваш ідентифікатор повідомлення. Сподіваюся, він спрацює.


2
Ніколи не використовуйте, query_postsякщо вам не потрібно порушувати функції сторінки. Завжди використовуйте WP_Queryабо get_postsдля користувацьких запитів :-)
Пітер Гузен

так .. ви маєте рацію .. Це може також Wp_Query .. той же результат знайдений ..
Jahirul Islam Mamun

Є також 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.