为什么在我的查询中是显示两个标题?

时间:2019-05-04 作者:Jakub Krzyżanowski

我有一个非常具体的问题,我创建了一个查询,当前必须以不同于其他内容的方式显示第一篇文章,而且一切似乎都正常,但有一个问题是标题显示了两次,有什么帮助吗?这是我的代码:


                // args
                $args = array(
                    \'showposts\'     => 5,
                    \'post_type\'     => \'post\',
                    \'orderby\'       => \'date\',
                    // \'order\'          => \'ASC\',
                    \'meta_query\'    => array(
                        \'relation\'      => \'OR\',
                        array(
                            \'key\'       => \'type_id\',
                            \'value\'     => \'News\',
                            \'compare\'   => \'LIKE\'
                        ),

                    )
                );


                // query
                $the_query = new WP_Query( $args );
                ?>
                <?php if( $the_query->have_posts() ): 
                    $i = 0; 
                    while ($the_query->have_posts() ) :
                    $the_query->the_post();
                    if ( $i == 0 ) : ?>
                <div class="card mb-3">
                    <a href="<?php the_permalink(); ?>" ><img src="<?php the_post_thumbnail_url() ?>" class="card-img-top"></a>
                    <div class="card-body">
                        <h2 class="card-title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
                        <p class="card-text"><small class="text-muted"><?php the_time(\'F jS, Y\'); ?></small></p>
                        <p class="card-text"><?php the_excerpt(); ?></p>
                    </div>
                <?php endif; 
                    if ( $i != 0 ) : 
                ?>
                <div class="secoundposttak">
                    <?php endif; ?>
                    <a href="<?php the_permalink(); ?>">
                        <img src="<?php the_field(\'thumbnail\'); ?>" />
                        <?php the_title(); ?>
                    </a>
                </div>

                <?php $i++;
                    endwhile;
                endif; ?>

                <?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>

enter image description here

2 个回复
最合适的回答,由SO网友:Qaisar Feroz 整理而成

试试这个。代码在修改的地方有注释。

<?php 

    // args
    $args = array(
                \'showposts\'     => 5,
                \'post_type\'     => \'post\',
                \'orderby\'       => \'date\',
                // \'order\'          => \'ASC\',
                \'meta_query\'    => array(
                    \'relation\'      => \'OR\',
                    array(
                        \'key\'       => \'type_id\',
                        \'value\'     => \'News\',
                        \'compare\'   => \'LIKE\'
                    ),

                )
            );


    // query
    $the_query = new WP_Query( $args );
            ?>
    <?php if( $the_query->have_posts() ): 
                $i = 0; 
                while ($the_query->have_posts() ) :
                    $the_query->the_post();

                    // First post
                    if ( $i == 0 ) : ?>
                        <div class="card mb-3">
                            <a href="<?php the_permalink(); ?>" ><img src="<?php the_post_thumbnail_url() ?>" class="card-img-top"></a>
                            <div class="card-body">
                                <h2 class="card-title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
                                <p class="card-text"><small class="text-muted"><?php the_time(\'F jS, Y\'); ?></small></p>
                                <p class="card-text"><?php the_excerpt(); ?></p>
                            </div>
                        </div> <!-- Add this to close div with class card mb-3 -->
                    <?php endif; 


                    // Other posts
                    if ( $i != 0 ) : 
                    ?>
                        <div class="secoundposttak">
                        <?php //endif;  <-- Not needed, move it  below (before $i++ )   ?>
                            <a href="<?php the_permalink(); ?>">
                                <img src="<?php the_field(\'thumbnail\'); ?>" />
                                <?php the_title(); ?>
                            </a>
                        </div>

                    <?php endif;    // <-- Add this for  if ( $i != 0 ) :  ?>



                    <?php
                        $i++;
                endwhile;
           endif; ?>

            <?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
Also pay attention 回复@Krzysiek Dródż回答末尾的建议♦ . 我希望这会有所帮助。

SO网友:Krzysiek Dróżdż

它会显示两次标题,因为您的代码应该做到这一点。。。

如果格式正确,您可以清楚地看到它:

// args
$args = array(
    \'showposts\'     => 5,
    \'post_type\'     => \'post\',
    \'orderby\'       => \'date\',
    // \'order\'          => \'ASC\',
    \'meta_query\'    => array(
        \'relation\'      => \'OR\',
        array(
            \'key\'       => \'type_id\',
            \'value\'     => \'News\',
            \'compare\'   => \'LIKE\'
        ),
    )
);


// query
$the_query = new WP_Query( $args );
?>
<?php 
    if ( $the_query->have_posts() ): 
        $i = 0; 
        while ( $the_query->have_posts() ) :
            $the_query->the_post();
?>

            <?php if ( $i == 0 ) : ?>
               <div class="card mb-3">
                   <a href="<?php the_permalink(); ?>" ><img src="<?php the_post_thumbnail_url() ?>" class="card-img-top"></a>
                   <div class="card-body">
                       <?php // here you print the title for first item only ?>
                       <h2 class="card-title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h2>
                       <p class="card-text"><small class="text-muted"><?php the_time(\'F jS, Y\'); ?></small></p>
                       <p class="card-text"><?php the_excerpt(); ?></p>
                   </div>
           <?php endif; ?>

           <?pho if ( $i != 0 ) : ?>
               <div class="secoundposttak">
           <?php endif; ?>

           <a href="<?php the_permalink(); ?>">
               <img src="<?php the_field(\'thumbnail\'); ?>" />
               <?php // and here you print title for every item, so for first item too - so you get it twice ?>
               <?php the_title(); ?>
           </a>
       </div>

       <?php
           $i++;
           endwhile;
       endif; ?>

  <?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
现在您可以清楚地看到,您为循环中的第一个项目打印了一些特殊的内容,但也为循环中的每个项目打印了正常标题-因此对于第一个项目,您将同时打印这两个项目。。。

老实说,封装html是一种非常危险和混乱的方式——如果您采用这种方式编码,那么创建未关闭的标记将非常容易。因为您在获取打印的零件时遇到了问题。。。

相关推荐

Skip latest 3 posts from loop

我下载了一个初学者主题(下划线)。我想从索引页的循环中排除前3篇文章。这是循环;<?php if ( have_posts() ) : if ( is_home() && ! is_front_page() ) : ?> <header> <h1 class=\"page-title screen-reader-text\"><?php sing