如何在Wordpress中循环自定义帖子并根据页面标题显示

时间:2014-03-05 17:16:55

标签: php wordpress

根据您所使用的帖子类型,有谁知道如何显示自定义帖子类型?

例如,如果我访问www.url.com/services/digital页面,我想展示数字产品组合,或者如果我访问www.url.com/services/audio页面,我想展示音频组合

只是为了澄清我有两种帖子类型 -

  1. 服务
  2. 组合
  3. 我写的代码工作得很好但肯定有一个更简单的方法来做,因为我有六个类别我不想在同一页面上六次写出这段代码

        <?php
    
            if ( is_single( 'digital' ) ) {
    
                $the_query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page'=>'3', cat=>'9') );
    
                while ( $the_query->have_posts() ) : $the_query->the_post();
    
                    echo'<div class="group service_portfolio">';
    
                        echo'<div class="service_portfolio_left">';
    
                            echo '<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'Client'; echo'</h2>';
    
                            echo'<p style="color:#757573; margin-bottom:5%;">'; echo the_title(); echo'</p>';
    
                            echo '<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'What we done'; echo'</h2>';
    
                            echo '<p style="color:#757573; margin-bottom:5%;">'; echo the_field('what_was_done'); echo'</p>';
    
                            echo'<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'See for yourself'; echo'</h2>';
    
                            echo '<p class"bottom_p">'; echo'<a href="http://'; the_field('portfolio_url'); echo'">'; echo the_field('portfolio_url'); echo' </a>'; echo '</p>';
    
                        echo'</div>';
    
                    echo'<div class="service_portfolio_left" style="text-align:right;">';
    
                    echo the_post_thumbnail();
    
                    echo'</div>';
    
                    echo'</div>';
    
    
                        endwhile;
                        wp_reset_postdata();
                    }
    
                    ?>
    
       <!-- Output print work -->
    
        <?php
    
            if ( is_single( 'print' ) ) {
    
                $the_query = new WP_Query( array( 'post_type' => 'portfolio', 'posts_per_page'=>'3', cat=>'10') );  
    
                while ( $the_query->have_posts() ) : $the_query->the_post();
    
                    echo'<div class="group service_portfolio">';
    
                        echo'<div class="service_portfolio_left">';
    
                            echo '<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'Client'; echo'</h2>';
    
                            echo'<p style="color:#757573; margin-bottom:5%;">'; echo the_title(); echo'</p>';
    
                            echo '<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'What we done'; echo'</h2>';
    
                            echo '<p style="color:#757573; margin-bottom:5%;">'; echo the_field('what_was_done'); echo'</p>';
    
                            echo'<h2 style="color:#52514e; font-size:1.5em; margin-bottom:5%;">'; echo'See for yourself'; echo'</h2>';
    
                            echo '<p class"bottom_p">'; echo'<a href="http://';  the_field('portfolio_url'); echo'">'; echo the_field('portfolio_url'); echo' </a>'; echo '</p>';
    
                        echo'</div>';
    
                    echo'<div class="service_portfolio_left" style="text-align:right;">';
    
                    echo the_post_thumbnail();
    
                    echo'</div>';
    
                    echo'</div>';
    
    
                        endwhile;
                        wp_reset_postdata();
                    }
    
                    ?>
    

1 个答案:

答案 0 :(得分:1)

听起来我想要使用6x存档模板(archive-services.phparchive-digital.php等),因为这是呈现CPT的标准方式,它消除了对条件和查询部分的需要。然后在每一个中你可以在循环中使用template part标记;这样,您可以使用以下方法轻松地为所有6x模板重用相同的标记:

<?php get_template_part( $slug, $name ); ?> 

这样做会给你一些灵活性,同时避免所有的重复。因此,您的6x存档模板可能如下所示:

<?php
    get_header();

    if(have_posts()) : while(have_posts()) : the_post();

        get_template_part( 'loop', 'preview' );

    endwhile; endif;

    get_footer();
?>

这将加载loop-preview.php,它将包含在循环内的标记。

编辑: @ AndrewBartel的评论让我意识到我过度思考了这一点。如果您提到的6x类别用于自定义帖子类型,那么您可以改为创建6x类别模板(category-digital.phpcategory-audio.php等。)这些将显示< em>该类别中的所有帖子。这可能是最直接的处理方式;模板部分位仍然有效。查看WP Codex entry for templates了解详情。