Вопрос или проблема
У меня есть сомнения относительно wp_get_archives()
функции
На моем сайте я создал следующий шаблон страницы, который использует функцию wp_get_archives()
для отображения списка постов:
<?php
/**
* Название шаблона: Архив постов
*
* Пользовательский шаблон страницы для отображения всех постов.
*
* Часть "Название шаблона:" выше позволяет выбирать его
* из выпадающего меню на экране редактирования страницы.
*
* @package WordPress
* @subpackage Twenty_Ten
* @since Twenty Ten 1.0
*/
get_header();
?>
<!-- Содержимое (решетка) -->
<div class="container">
<!-- Введение -->
<section id="представление">
<div class="row">
<div class="col-sm-12">
<!--<h1 class="text-center"><small>Ассоциация за Защиту Прав Человека Eritrean</small></h1>-->
<h1 class="text-center title">Ассоциация за Защиту Прав Человека Eritrean</h1>
<h1 class="text-center leadTitle">Ассоциация в Защите Прав Человека Eritrean</h1>
<!--
<p class="lead text-center">
Ассоциация в Защите Прав Человека Eritrean
</p>
-->
</div><!-- /.col-sm-12 -->
</div><!-- /.row -->
</section><!-- /раздел представления -->
<!-- Избранные проекты -->
<header class="header-sezione">
<h2>Архив постов</h2>
</header>
<ul>
<?php wp_get_archives('type=postbypost'); ?>
</ul>
</section>
</div>
<?php get_footer(); ?>
Это работает, и это результат (мне нужно только настроить правильный CSS для размера шрифта)
Хорошо, теперь мой вопрос: используя функцию wp_get_archives()
, могу ли я отображать дату поста перед каждым постом?
Я хочу получить что-то вроде:
10/04/2014 – НАЗВАНИЕ ПОСТА
вместо простого названия поста.
Могу ли я сделать это, передав некоторые параметры функции wp_get_archives()
? Или единственное решение – не использовать эту функцию и создать собственный цикл в своем шаблоне?
wp_get_archives()
не может отображать дату поста, но вы можете заставить wp_get_archives
отображать дату, используя хуки.
Поместите следующую функцию в конец вашего пользовательского файла шаблона или файла functions.php –
function wpse_the_title($title, $id){
if( $date = get_the_date('d/m/Y', $id) ){
$title = sprintf('%s - %s', $date, $title);
}
return $title;
}
Замените на соответствующий код –
<?php add_filter('the_title', 'wpse_the_title', 10, 2); ?>
<ul>
<?php wp_get_archives('type=postbypost'); ?>
</ul>
<?php remove_filter('the_title', 'wpse_the_title', 10, 2); ?>
Функция wp_get_archives в WordPress не поддерживает отображение дат. Тем не менее, мое решение сработало без использования этой функции, и это все равно, вероятно, удобно для вас или кого-то другого:
В файл functions.php вашей темы поместите следующее:
function recentPostsDate() {
$rPosts = new WP_Query();
$rPosts->query('showposts=6');
while ($rPosts->have_posts()) : $rPosts->the_post(); ?>
<ul>
<li>
<a href="https://wordpress.stackexchange.com/questions/157561/<?php the_permalink(); ?>" title="<?php the_title(); ?>">
<?php the_date('d/m/Y', '<span class="date">', '</span>'); the_title(); ?>
</a>
</li>
</ul>
<?php endwhile;
wp_reset_query();
}
После этого вы можете использовать это в своем основном шаблоне, просто вызвав функцию:
<?php recentPostsDate(); ?>
В зависимости от настроек, которые я выбрал, вывод будет выглядеть примерно так:
01/04/2015 Заголовок первой новости
23/03/2015 Заголовок второй новости
14/03/2015 Заголовок третьей новости
…
Ответ или решение
Функция wp_get_archives()
в WordPress предназначена для вывода архивов публикаций, включая их заголовки и количество комментариев. Однако она не предоставляет возможности напрямую отображать дату публикации перед заголовками постов. Если вы хотите внедрить даты в архивы постов, вам необходимо использовать подход с хуками или создать собственный цикл, который обеспечит вам необходимую функциональность.
Решение через хук
Вы можете использовать хук the_title
, чтобы модифицировать вывод заголовков постов, получая дату перед ними. Для этого вы должны добавить следующую функцию в ваш файл шаблона или в файл functions.php
вашей темы.
Код:
function wpse_the_title($title, $id) {
if ($date = get_the_date('d/m/Y', $id)) {
$title = sprintf('%s - %s', $date, $title);
}
return $title;
}
add_filter('the_title', 'wpse_the_title', 10, 2);
?>
<ul>
<?php wp_get_archives('type=postbypost'); ?>
</ul>
<?php remove_filter('the_title', 'wpse_the_title', 10, 2); ?>
Пошаговое объяснение:
-
Создание функции: Функция
wpse_the_title
принимает два параметра:$title
и$id
. Она вызывает функциюget_the_date()
, чтобы получить дату публикации в форматедд/мм/гггг
, а затем обновляет заголовок, добавляя дату перед ним. -
Применение фильтра:
add_filter()
добавляет функциюwpse_the_title
к фильтруthe_title
. Это значит, что каждый раз, когда WordPress выводит заголовки постов, ваша функция будет применяться. -
Вывод архивов:
wp_get_archives('type=postbypost');
выводит архивы постов. -
Удаление фильтра: После отображения архивов необходимо удалить фильтр с помощью
remove_filter()
, чтобы избежать изменения заголовков в других местах вашего шаблона.
Альтернативный метод: Пользовательский цикл
Если вам нужно больше контроля над выводом, вы можете создать свой собственный цикл с использованием WP_Query
. Это даст вам гибкость в настройке формата вывода. Вот пример кода:
function recent_posts_with_dates() {
$args = array('posts_per_page' => 6);
$recent_posts = new WP_Query($args);
if ($recent_posts->have_posts()) {
echo '<ul>';
while ($recent_posts->have_posts()) {
$recent_posts->the_post();
echo '<li>';
echo '<a href="' . get_permalink() . '" title="' . get_the_title() . '">';
echo get_the_date('d/m/Y') . ' - ' . get_the_title();
echo '</a>';
echo '</li>';
}
echo '</ul>';
}
wp_reset_postdata();
}
Как использовать:
Теперь вы можете использовать эту функцию в своем шаблоне:
<?php recent_posts_with_dates(); ?>
Заключение
Оба предложенных метода позволят вам выводить даты перед заголовками постов на вашем сайте WordPress. Выбор между хуком и пользовательским циклом зависит от ваших предпочтений и требований к дизайну. Первый метод проще в реализации, тогда как второй позволяет больше настроек.