视图渲染逻辑属于 functions.php 还是内容部分模板?
Where the view rendering logic belongs to, functions.php or content-partial template?
我最近正在使用 Wordpress 实现 "Recently Post" 呈现逻辑。基于@helenhousandi 的 example,我通过 WP_Query()
完成了任务以拉出我的 post。
但是,我现在面临架构问题。在 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>
这是最简单的方法,但很难重用于其他自定义 post 类型。
2。使用 get_template_url()
包含循环渲染逻辑
conctent-recently-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_type
和 posts_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_type
和 posts_per_page
重用它,但我认为把这些种类放在一起有点奇怪functions.php
中的渲染逻辑。我们应该把所有这些与模板相关的逻辑放在单独的模板文件中,这样可以为以后的维护形成一个更好的结构,不是吗?
I am wondering is there any other better ways to solve the rendering
logic in Wordpress like that in this example?
您可以组合 2 和 3。
使用接受 $posttype 作为参数的函数。
将模板部分提取到模板文件
并将模板文件包含在函数中。
我最近正在使用 Wordpress 实现 "Recently Post" 呈现逻辑。基于@helenhousandi 的 example,我通过 WP_Query()
完成了任务以拉出我的 post。
但是,我现在面临架构问题。在 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>
这是最简单的方法,但很难重用于其他自定义 post 类型。
2。使用 get_template_url()
包含循环渲染逻辑
conctent-recently-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_type
和 posts_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_type
和 posts_per_page
重用它,但我认为把这些种类放在一起有点奇怪functions.php
中的渲染逻辑。我们应该把所有这些与模板相关的逻辑放在单独的模板文件中,这样可以为以后的维护形成一个更好的结构,不是吗?
I am wondering is there any other better ways to solve the rendering logic in Wordpress like that in this example?
您可以组合 2 和 3。
使用接受 $posttype 作为参数的函数。
将模板部分提取到模板文件 并将模板文件包含在函数中。