视图呈现逻辑属于哪里,functions.php或内容部分模板?

时间:2015-04-23 06:04:45

标签: php wordpress refactoring

我最近用Wordpress实现了“最近发布”渲染逻辑。基于@ helenhousandi的example,我通过WP_Query()完成了任务以取出我的帖子。

但是,我现在面临架构问题。在Wordpress中,有3种方法可以在single.php文件中包含此循环渲染片段:

1。将渲染逻辑直接放在single.php

single.php中

<div id="header-announcements">
<h3>Announcements</h3>
    <?php
    $queryObject = new WP_Query( 'post_type=announcements&posts_per_page=5' );
    // The Loop!
    if ($queryObject->have_posts()) {
        ?>
        <ul>
        <?php
        while ($queryObject->have_posts()) {
            $queryObject->the_post();
            ?>

            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
        }
        ?>
        </ul>
        <div><a href="#">View More</a></div>
        <?php
    }
    ?>
</div>

这是最简单的方法,但很难重复用于其他自定义帖子类型。

2。使用get_template_url()包含循环呈现逻辑

conctent的最近post.php中

<?php
$queryObject = new WP_Query( 'post_type=announcements&posts_per_page=5' );
// The Loop!
if ($queryObject->have_posts()) {
    ?>
    <ul>
    <?php
    while ($queryObject->have_posts()) {
        $queryObject->the_post();
        ?>

        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php
    }
    ?>
    </ul>
    <div><a href="#">View More</a></div>
    <?php
}
?>

single.php中

<div id="header-announcements">
<h3>Announcements</h3>
    <?php get_template_url( 'content', 'recently-post'); ?>
</div>

将渲染逻辑放在单独的模板文件中,比如content-recently-post.php,然后将其包含在single.php中。这应该更好,因为它可以在其他模板文件中重用。

这里的不足之处在于,post_typeposts_per_page与渲染逻辑紧密耦合,因此仍然很难重复使用。

3。在functions.php中注册一个函数,并在single.php

中调用该函数

的functions.php

<?php
if(!function_exists('ka_show_recently_post')) :
    function ka_show_recently_post($post_type, $num) {
      $queryObject = new WP_Query( 'post_type=' . $post_type . '&posts_per_page=' . $num );
      if ($queryObject->have_posts()) :
          echo '<ul>';
          while ($queryObject->have_posts()) :
              $queryObject->the_post();
              echo '<li><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></li>';
          endwhile;
          echo '</ul>';
      endif;
    }
endif;
?>

single.php中

<div id="header-announcements">
<h3>Announcements</h3>
    <?php ka_show_recently_post('announcements', 5) ?>
</div>

这种方法的优点在于它允许您根据您想要的post_typeposts_per_page重复使用它,但我认为放置这些类型的渲染有点奇怪functions.php中的逻辑。我们应该将所有这些模板相关逻辑放在单独的模板文件中,这样就形成了一个更好的结构,以便将来维护,不应该吗?

  

我想知道是否有其他更好的方法来解决渲染问题   Wordpress中的逻辑就像这个例子中那样?

1 个答案:

答案 0 :(得分:1)

您可以合并2&amp; 3。

使用接受$ posttype作为参数的函数。

将模板部件提取到模板文件 并在函数中包含模板文件。