루프 외부에서 컨텐츠 게시


답변:


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;

이것을 사용할 때 단축 코드가 여전히 작동합니까?
Tim Baas

그렇지 않다는 것을 알았습니다. setup_postdata( $post );먼저 사용하고 , 그 후에 사용할 수 있습니다the_content();
Tim Baas

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
Brad Dalton

이 페이지는 do_shortcode"느려질지도 모른다"는 말과 "짧은 코드가 호출하는 기능 만 사용할 수있다"는 것 외에는 피해야 할 강력한 이유를 제공하지 않습니다 . 이러한 이유는 가장 간단한 시나리오에서는 가장 사소한 경우에만 유효합니다. 짧은 코드가 다른 곳에 생성되거나 여러 개의 짧은 코드 또는 다른 콘텐츠 및 마크 업과 혼합 된 짧은 코드가있는 경우 실패합니다. 설득력있는 이유없이, 나는 피해야 할 진술에 동의하지 않을 것이다 do_shortcode. 이것은 조기 최적화 냄새가납니다 .
Jeff

또한 코드와 원본 단축 코드의 연결을 증가시킵니다. 단축 코드의 백업 방법의 이름이 바뀌거나 서명이 변경되면 코드가 손상됩니다.
Jeff

1

위의 Tim의 의견을 바탕으로 Stephen Harris의 기사 에서 영감을 얻은 완전성을 위해 사용 가능한 솔루션 the_content()은 다음과 같습니다.

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

따라서 필터가 적용되고 (단락 삽입 등) 단축 코드가 작동합니다.


이것은 거의 브라우저에서 충돌을 일으켰습니다 : / 앰퍼샌드를 제거하지만 여전히 단축 코드를 구문 분석하지 않습니다.
Zade

0

대상 게시물 ID (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_postand 와 함께 솔루션 $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은 "post", "page"또는 사용자 정의 게시물 유형일 수 있습니다. 여기 p = 302는 게시물 ID입니다. 제대로 작동하길 바랍니다.


2
query_posts페이지 기능을 중단하지 않으면 사용 하지 마십시오 . 항상 WP_Query또는 get_posts사용자 정의 쿼리에 사용 :-)
Pieter Goosen

예 .. 당신 말이 옳습니다. Wp_Query도 가능합니다. 같은 결과를
얻었습니다

pre_get_posts필터 도 있습니다 the_post. 너무 많은 세부 사항.
Nathan Powell

-3

다음과 같이 카테고리 X에 컨텐츠를 넣고 query_post를 사용할 수 있습니다.

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.