setup_postdata ()가 작동하지 않는 것 같습니까?


12

왜 그런지 잘 모르겠지만 get_posts()일부 데이터를 쿼리하는 데 사용 했습니다. 그런 다음 사용했습니다 setup_postdata()... the_permalink()새로운 게시물 데이터와 같은 기능을 사용할 수 있도록 사용했다고 생각 합니까?

<?php foreach ($childPosts as $cp) : setup_postdata($cp); ?>

<article <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
  <?php if (has_post_thumbnail()) : ?>
  <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(($hasOutputNotFeaturedDiv) ? 'thumb-small' : null) ?></a>
  <?php endif; ?>
  <?php the_excerpt(); ?>
  <p class="more"><a href="<?php the_permalink() ?>">Read more ...</a></p>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>

<?php endforeach; ?>

하지만 the_excerpt새로운 게시물 데이터 값만 포함 된 것으로 보입니다 . 왜 그런가요? 사용 echo get_the_permalink($cp)하면 정상적으로 작동 한다는 것을 알았 습니다. 그러나 더 짧은 버전이 더 좋을 것이라고 생각합니다.

답변:


32

내가 잘못했을 수도 있지만 내가보고있는 것에서 사용자 정의 선택 쿼리 (query_posts뿐만 아니라)를 수행 할 때 "setup_postdata ()"를 사용해야합니다 : http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

또한 해당 맞춤 선택 쿼리에 "the_title ()"및 "the_permalink ()"와 같은 태그를 사용하려면 setup_postdata (에서 다른 변수 이름이 아닌) 변수 이름 $ post 를 사용해야합니다. )-AS WELL- "foreach"루프 전에 글로벌 $ post 를 호출해야 합니다 ...

기본적으로 해당 코덱 링크에서 해당 예제를 따릅니다. 변수 이름 $ post를 변경하지 마십시오. 그렇지 않으면 변수가 손상됩니다.

HTH


2
"글로벌 $ post에 전화해야합니다". 예! 코덱스에없는 이유
AlxVallejo

27

교체

foreach ( $childPosts as $cp ) : setup_postdata( $cp );

foreach ( $childPosts as $post ) : setup_postdata( $post );

따라서 $post와 함께 정확한 변수 를 사용해야 합니다 setup_postdata().


이것은 내가 겪고있는 문제를 해결했습니다. 건배 친구
Jeff K.

2
누군가이 사람에게 맥주를 사요! 감사합니다 .. 지역 변수가 왜 / 어떻게 엉망이 될 수 있는지 setup_postdata()아십니까?
Odys

기묘한. 매개 변수로 전달할 때 특정 변수 이름을 요구하는 것은 너무 비논리적 인 것 같습니다.
Gavin

6

setup_postdata ()를 사용하는 위치에 따라 (예를 들어 메인 루프 또는 함수 / 사이드 바 위젯에없는 경우) 선언해야 할 수도 있습니다.

global $post;

4

global post;명령 패밀리 등 setup_postdata($post);을 사용하려는 경우 에는 작동하지 않습니다 the_title().

https://codex.wordpress.org/Function_Reference/setup_postdata있습니다.

대신 사용

// global $post; setup_postdata($post_object); //don't do this!
setup_postdata( $GLOBALS['post'] =& $post_object );

... 또한 $post_object유효한 WP_Post 객체 인지 확인하십시오 .


1
이 답변은 실제로 OP를 꾸짖는 대신 문제를 해결합니다. p
nodws

1

게시물을 쿼리 할 때 전달 된 인수 세트와 함께 일반 루프를 사용하십시오. 그런 다음 끝에 쿼리를 재설정하십시오.

<?php 

    // makes query respect paging rules
    $paged = get_query_var('paged');

    // defining the arguements for the custom loop
    $variablenameQuery = array(
        'post_type'                 => 'seating-charts',
        'post_status'               => 'publish',
        'cust_tax_name'             => 'custom-tax-term',
        'posts_per_page'            => -1, // neg 1 means all posts
        'orderby'                   => 'date',
        'order'                     => 'ASC',
        'paged'                     => $paged,
    ); // end query

    // pass result into query_posts to get result
    query_posts($variablenameQuery);

?>
<?php if (have_posts()) : ?>

    <?php while (have_posts()) : the_post(); ?>

        <?php // Individual Post Styling ?>

    <?php endwhile; ?>

        <?php // paged navigation - next post, previous post... ?>

    <?php else : ?>

    <h3>Ooops looks like there was an issue. Please <a href="<?php echo get_option('home'); ?>/contact" title="Contact Us">get in touch</a> with us and we'll get the problem fixed.</h3>

<?php endif; ?>

<!-- resets the WordPress Query -->
<?php wp_reset_query(); ?>

고마워, 이것은 작동합니다. 그러나 이해를 위해 왜 효과 setup_postdata()가없는 것입니까? 잘못 사용 했습니까?
Jiew Meng

1
@jiewmeng- $post대신에 사용 $cp하여 문제 가 해결 되는지 확인하십시오 .
t31os

@ t31os가 제안한 수정에 투표합니다. 코덱의 예제는 이와 같은 사용법을 보여 주며 $ post는 WordPress의 특수 변수이므로 사용한 것보다 루프 내부에서 더 많은 작업을 수행 할 수 있습니다.
curtismchale

@ t31os, @curtismchale, 너무 작동하지 않는 것 같습니다. 그것은 여전히 ​​같은 결과를 제공합니다
Jiew Meng
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.