0

私はループを持っていますが、そのループにはスティッキーポストしかありません。したがって、私のロジックは次のように機能
します

そのコードは期待どおりに機能し、次のようになります。

<?php //we will get "Sticky Posts" only with this loop and exlude Featured Category
    $category = get_cat_ID('Featured');

    $col = 1; //Let's create first column


   $sticky = get_option( 'sticky_posts' );  

$args = array(
    /* Add whatever you need here - see http://codex.wordpress.org/Class_Reference/WP_Query */          
    'paged' => $paged,
    'category__not_in' => array($category),
    'post__in'  => $sticky, 
    'ignore_sticky_posts' => 1      
);

$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);

/*Below is IMPORTANT PART*/
if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) : 
 $wp_query->the_post();if(empty($sticky))break;?>



    <div <?php post_class('col'.$col); ?> id="post-<?php the_ID(); ?>">
    <?php if ($col == 1) echo '<div class="row">';//If column 1 create first row ?>
    <?php if ($col == 2) echo '<div class="row2">';//If column 2 create second row ?>
    <h3 class="mytitle"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'override' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h3>
        <div class="entry"> 
                <?php if ( has_post_thumbnail() ):?>
                <div class="featured_img">
                <?php
                the_post_thumbnail();
                echo '<div class="featured_caption">' . get_post(get_post_thumbnail_id())->post_excerpt . '</div>';
                ?>
                </div><!--/featured_img-->
                <?php endif; ?>
        <?php  // let's enable more link on pages...
        global $more;
        $more = 0;
        ?>
            <?php the_content(__('Read more','override')); ?>   
            <div class="clear"></div>               
            <div class="custom_fields"><?php the_meta(); ?></div><br/>
            <p class="postmetadata">

            <?php _e('Filed under&#58;','override'); ?> <?php the_category(', ') ?> <?php _e('by','override'); ?> <?php  the_author(); ?><br/><?php the_tags(__('Tags:','override'), ', ', '<br />'); ?>
            <?php _e('Posted on:&nbsp;','override'); ?><?php the_time(get_option('date_format')); ?><br/>
            <?php if ( comments_open() ) {
            comments_popup_link(__('No Comments &#187;','override'), __('1 Comment &#187;','override'), __('% Comments &#187;','override'));} 
            else {
            _e('Comments are disabled!','override');
            }
            ?>
            <?php edit_post_link(__('&nbsp;Edit','override'), __('&nbsp;&#124;','override'), ''); ?>
            </p>
        </div><!--/entry-->
    </div><!--/post_class-->

    <?php /*Enable Two Column Layout*/
        if($col==1) {
        $col=2;
        echo "</div>";
        }
        else if($col==2)  {
        $col=1;
         echo "</div>";
        }

    endwhile; ?>
    <?php endif; ?><!--END if THE LOOP (Sticky)-->

<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>

この作業コードの前に、次のような別のロジックを試しました。 「空でない場合はループを続行する」ため、コード内のすべてが同じままになりますが、コードは次の

if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) : $wp_query->the_post();if(empty($sticky))break;?>

ようになります。

if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) : $wp_query->the_post();if(!empty($sticky))continue;?>

「付箋」がなくてもループが続く(他の投稿を返す)if(!empty($sticky))continue;ため、一部が期待どおりに機能しないため、ここで混乱しました。付箋が無ければループは止まると思っていたのですが、そうではありません。My は、スティッキー ポストがある場合にこれを表示し、スティッキーがない場合にこれを表示します。
var_dump($sticky)
array(1) { [0]=> int(214) }array(0) { }

私の質問は、ループが使用している場合に他の投稿を返し続ける理由ですif(!empty($sticky))continue;(存在する場合は「スティッキー」のみを返し、存在しない場合は何も返さないと思いました。)

ありがとうございました!!

4

2 に答える 2

1

まず、あなたのロジックがあなたのコードと完全に一致していないことを指摘させてください:)。

あなたのコードから私が理解していることから、返されたすべての投稿 を繰り返したいWP_Query()が、スティッキーなものだけをレンダリングしたい. あなたifwileループの中にいるので、現在の投稿がスティッキーかどうかを確認する必要があります。ただし、if(empty($sticky))そうはしません。スティッキー投稿がまったくないかどうかをチェックします。現在の投稿を確認する方法はif(is_sticky(the_ID())).

今、関係continue

PHPマニュアルから:

continue は、ループ構造内で使用され、現在のループ反復の残りをスキップし、条件評価で実行を継続し、次の反復の開始時に実行を継続します。

ご覧continueのとおり、ループを停止するのではなく、現在のステップの残りのコードを無視して次の反復を開始しようとします。現在の投稿がスティッキーでない場合、つまりif(!is_sticky(the_ID())).

ただし、スティッキーのみをフェッチすることを既に指定しているので ( )、チェックはまったく必要ないと思います。WP_Query()'post__in' => $sticky

参照:この WordPress Answers トピック.

于 2013-10-18T14:56:16.843 に答える
0

wordpressのコードはよくわかりませんが、そのコードで$stickyはwhileループで変数が更新されることはありません。$sticky = get_option( 'sticky_posts' );そのため、if 条件の直前に追加する必要があるかもしれません。

于 2013-10-18T13:41:58.760 に答える