Вопрос или проблема
Я управляю новостным сайтом и считаю, что добавление опции последнего обновления даты принесет значительные выгоды. Однако, на всех ресурсах, которые я вижу в интернете, предлагается заменить дату публикации на дату модификации. Я хочу обе, как в этой статье NYT.
Более того, я не хочу этого на каждой статье, так как редактирую статьи часто и не всегда хочу, чтобы это отражалось. Вместо этого, я хочу это для “вечнозеленого” контента, который остается популярным долгое время после публикации; я надеюсь, что Google будет показывать более недавнее время в результатах поиска. В результате я предпочитаю делать это через пользовательское поле или плагин CF — сейчас у меня установлен CMB2.
Тема, которую я использую, не очень полезна и использует следующую функцию для добавления даты к постам:
if (!function_exists('mh_magazine_post_meta')) {
function mh_magazine_post_meta() {
$mh_magazine_options = mh_magazine_theme_options();
if ($mh_magazine_options['post_meta_date'] === 'enable' || $mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop() || $mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular() || $mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<div class="mh-meta entry-meta">' . "\n";
if ($mh_magazine_options['post_meta_date'] === 'enable') {
echo '<span class="entry-meta-date updated"><i class="fa fa-clock-o"></i><a href="' . esc_url(get_month_link(get_the_time('Y'), get_the_time('m'))) . '">' . get_the_date() . '</a></span>' . "\n";
}
if ($mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop()) {
echo '<span class="entry-meta-author author vcard"><i class="fa fa-user"></i><a class="fn" href="' . esc_url(get_author_posts_url(get_the_author_meta('ID'))) . '">' . esc_html(get_the_author()) . '</a></span>' . "\n";
}
if ($mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular()) {
echo '<span class="entry-meta-categories"><i class="fa fa-folder-open-o"></i>' . get_the_category_list(', ', '') . '</span>' . "\n";
}
if ($mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<span class="entry-meta-comments"><i class="fa fa-comment-o"></i>';
mh_magazine_comment_count();
echo '</span>' . "\n";
}
echo '</div>' . "\n";
}
}
}
add_action('mh_post_header', 'mh_magazine_post_meta');
Как я могу это сделать? Я не люблю устанавливать плагины, поэтому думаю о чем-то, что могу добавить сам и вызвать через пользовательское поле.
Добавление пользовательского поля для условного отображения даты последнего изменения:
Вы можете использовать встроенную мета-коробку пользовательских полей вашего поста. Обычно она скрыта по умолчанию, поэтому ее нужно включить, перейдя в “Настройки экрана” и отметив поле “Пользовательские поля”, как на этом изображении:
Если вы используете новый блочный редактор, вы найдете эту опцию, перейдя на Экран редактирования поста > Нажмите кнопку с тремя точками в правом верхнем углу > Настройки > Продвинутые панели.
Теперь добавьте новое пользовательское поле, назовем его show_last_modified
и установите значение в true.
Отображение даты последнего изменения:
Функция the_modified_date()
покажет вам дату последнего изменения поста.
Чтобы ее отобразить, скорее всего вам понадобится переопределить функцию mh_magazine_post_meta()
.
function mh_magazine_post_meta() {
$mh_magazine_options = mh_magazine_theme_options();
if ($mh_magazine_options['post_meta_date'] === 'enable' || $mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop() || $mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular() || $mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<div class="mh-meta entry-meta">' . "\n";
if ($mh_magazine_options['post_meta_date'] === 'enable') {
echo '<span class="entry-meta-date updated"><i class="fa fa-clock-o"></i><a href="' . esc_url(get_month_link(get_the_time('Y'), get_the_time('m'))) . '">' . get_the_date() . '</a></span>' . "\n";
// Custom code
if(!empty(get_post_meta(get_the_ID(), 'show_last_modified', true)){
echo 'Last modified date:' . the_modified_date();
}
//
}
if ($mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop()) {
echo '<span class="entry-meta-author author vcard"><i class="fa fa-user"></i><a class="fn" href="' . esc_url(get_author_posts_url(get_the_author_meta('ID'))) . '">' . esc_html(get_the_author()) . '</a></span>' . "\n";
}
if ($mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular()) {
echo '<span class="entry-meta-categories"><i class="fa fa-folder-open-o"></i>' . get_the_category_list(', ', '') . '</span>' . "\n";
}
if ($mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<span class="entry-meta-comments"><i class="fa fa-comment-o"></i>';
mh_magazine_comment_count();
echo '</span>' . "\n";
}
echo '</div>' . "\n";
}
}
add_action('mh_post_header', 'mh_magazine_post_meta');
Поместите приведенный выше код в вашу дочернюю тему и настройте разметку в соответствии с вашими потребностями.
Ответ или решение
Добавление функции отображения даты последнего изменения контента на вашем новостном сайте может значительно улучшить пользовательский опыт и его SEO-оптимизацию. Это позволяет посетителям видеть, что статья актуальна и обновлена, что особенно важно для "вечнозелёного" контента, который остаётся полезным и популярным на протяжении длительного времени.
Теория
Ваша задача заключается в том, чтобы добавлять информацию о дате последнего изменения статьи без замены первоначальной даты публикации. Это позволит одновременно отображать дату публикации и дату последнего обновления. Таким образом, пользователи смогут оценить актуальность информации. При этом важно отметить, что не каждый материал требует добавления даты обновления, особенно если изменения незначительны.
Существует несколько способов внедрения такой функциональности, но один из наиболее гибких и мощных – использование пользовательских полей. Пользовательские поля (custom fields) в WordPress позволяют добавлять произвольные метаданные к записям и страницам. Эта информация может варьироваться от дополнительных данных о самой записи до индикаторов для различных функциональных возможностей, таких как отображение даты последнего изменения.
Пример
В вашем случае, вы хотите сделать этот функционал доступным только для определённого контента. Это удобно реализовать с помощью пользовательского поля, которое будет указывать, следует ли отображать дату последнего изменения для конкретной статьи. Рассмотрим пошаговый процесс внедрения этой функциональности.
Подготовка пользовательских полей
-
Включение поля: Для начала в админской панели WordPress на странице редактирования постов вы должны включить отображение метабокса "Пользовательские поля" (Custom Fields). Это делается через "Экранные параметры" в правом верхнем углу.
-
Создание пользовательского поля: Для записи, которой необходимо показать дату последнего изменения, создайте новое пользовательское поле. Назовите его, например,
show_last_modified
, и установите значениеtrue
.
Отображение даты последнего изменения
Теперь, когда пользовательское поле создано, вам необходимо изменить функцию mh_magazine_post_meta
, чтобы отображать дату последнего изменения, если поле активно.
function mh_magazine_post_meta() {
$mh_magazine_options = mh_magazine_theme_options();
if ($mh_magazine_options['post_meta_date'] === 'enable' || $mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop() || $mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular() || $mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<div class="mh-meta entry-meta">' . "\n";
if ($mh_magazine_options['post_meta_date'] === 'enable') {
echo '<span class="entry-meta-date updated"><i class="fa fa-clock-o"></i><a href="' . esc_url(get_month_link(get_the_time('Y'), get_the_time('m'))) . '">' . get_the_date() . '</a></span>' . "\n";
// Провека поля show_last_modified
if (get_post_meta(get_the_ID(), 'show_last_modified', true) === 'true') {
echo '<span class="entry-meta-modified"><i class="fa fa-refresh"></i>Обновлено: ' . get_the_modified_date() . '</span>' . "\n";
}
}
if ($mh_magazine_options['post_meta_author'] === 'enable' && in_the_loop()) {
echo '<span class="entry-meta-author author vcard"><i class="fa fa-user"></i><a class="fn" href="' . esc_url(get_author_posts_url(get_the_author_meta('ID'))) . '">' . esc_html(get_the_author()) . '</a></span>' . "\n";
}
if ($mh_magazine_options['post_meta_cat'] === 'enable' && in_the_loop() && is_singular()) {
echo '<span class="entry-meta-categories"><i class="fa fa-folder-open-o"></i>' . get_the_category_list(', ', '') . '</span>' . "\n";
}
if ($mh_magazine_options['post_meta_comments'] === 'enable') {
echo '<span class="entry-meta-comments"><i class="fa fa-comment-o"></i>';
mh_magazine_comment_count();
echo '</span>' . "\n";
}
echo '</div>' . "\n";
}
}
add_action('mh_post_header', 'mh_magazine_post_meta');
Применение
-
Добавление кода в вашу тему: Этот модифицированный кусок кода должен быть добавлен в файл функций вашей дочерней темы (
functions.php
). Если вы ещё не используете дочернюю тему, настоятельно рекомендуется её создать, чтобы не потерять изменения при обновлении основной темы. -
Тестирование функциональности: После добавления кода, протестируйте выполнение на нескольких записях. Убедитесь, что метаданные отображаются правильно и только там, где это необходимо.
-
Обновление статей: Используйте эту функцию для улучшения SEO ваших популярных постов, обновляя и добавляя им соответствующую дату модификации.
Этот метод позволит вам реализовать необходимый функционал без использования сторонних плагинов, оставляя ваш сайт лёгким и независимым от дополнительных зависимостей.