WordPress — Куда относится логика визуализации представления, functions.php или шаблон с частичным содержимым?

Я недавно внедрил логику рендеринга «Недавно опубликовано» в WordPress. Основано на @ helenhousandi пример, Я выполнил задачу через 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_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, Мы должны поместить все эти шаблоны логики в отдельные файлы шаблонов, что формирует лучшую структуру для будущего обслуживания, не так ли?

Мне интересно, есть ли другие лучшие способы решить рендеринг
логика в WordPress, как в этом примере?

1

Решение

Вы можете объединить 2&3.

Используйте функцию, которая принимает $ posttype в качестве аргумента.

Извлеките часть шаблона в файл шаблона
и включите файл шаблона в функцию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]