- Вопрос или проблема
- Ответ или решение
- Как добавить пользовательские метаданные на страницу архива/постов WordPress
- Шаг 1: Убедитесь, что пользовательское поле настроено правильно
- Шаг 2: Измените код в файле loop-archive.php
- Шаг 3: Разместите код в нужном месте
- Шаг 4: Проверка на уровне темы
- Шаг 5: Оптимизация под SEO
- Заключение
Вопрос или проблема
В настоящее время я работаю над новостным сайтом и использую функцию архива WordPress для отображения всех моих постов в ленте (когда вы нажимаете на заголовки постов, вы попадаете на исходный сайт). Мне нужно добавить еще одну метаданную к этим постам (источник новостной статьи)..
Вот как это выглядит сейчас, мне нужен источник в строке с датой и автором.
Я использовал плагин Advanced Custom Fields, чтобы создать пользовательский метабокс для каждого поста, в который я могу ввести источник статьи. Это, кажется, работает нормально, но я не могу понять, как это отобразить на странице архива.
Это код, который я добавил в loop-archive.php, потому что именно здесь я хочу отобразить пользовательское поле. Но ничего не произошло. Я получил этот код с множества разных сайтов, что делает его легким для отображения ваших пользовательских метаданных. (всё это сделано на дочерней теме, тема, которую я использую, – Newspaper)
Как мне это исправить?
archive.php:
<?php get_header();
$td_archive_title="";
if (is_day()) {
$td_archive_title .= __('Ежедневные архивы:', 'newspaper' ) . ' ' . get_the_date();
} elseif (is_month()) {
$td_archive_title .= __('Ежемесячные архивы:', 'newspaper') . ' ' . get_the_date('F Y');
} elseif (is_year()) {
$td_archive_title .= __('Ежегодные архивы:', 'newspaper') . ' ' . get_the_date('Y');
} else {
$td_archive_title .= __('Архивы', 'newspaper');
}
?>
<div class="td-main-content-wrap td-container-wrap">
<div class="td-container">
<div class="td-crumb-container">
<?php echo tagdiv_page_generator::get_breadcrumbs(array(
'template' => 'archive',
)); ?>
</div>
<div class="td-pb-row">
<div class="td-pb-span8 td-main-content">
<div class="td-ss-main-content">
<div class="td-page-header">
<h1 class="entry-title td-page-title">
<span><?php echo esc_html( $td_archive_title ) ?></span>
</h1>
</div>
<?php
get_template_part('loop-archive');
?>
</div>
</div>
<div class="td-pb-span4 td-main-sidebar">
<div class="td-ss-main-sidebar">
<?php dynamic_sidebar( 'td-default' ) ?>
</div>
</div>
</div>
</div>
</div>
<?php get_footer(); ?>
архивный цикл:
<?php
$post_count = 1;
$column_count = 1;
$span = 'span6';
$column_break = 2;
$is_404 = false;
if( is_404() ) {
$is_404 = true;
$column_break = 3;
$span = 'span4';
$args = array(
'post_type'=> 'post',
'showposts' => 6,
'ignore_sticky_posts' => true
);
query_posts($args);
}
if (have_posts()) {
while ( have_posts() ) : the_post();
if( $column_count == 1 ) { ?>
<div class="td-block-row">
<?php } ?>
<div class="td-block-<?php echo esc_attr( $span ) ?>">
<div <?php post_class('td_module_1 td_module_wrap clearfix') ?> >
<div class="td-module-image">
<div class="td-module-thumb">
<?php
if ( current_user_can('edit_published_posts') ) {
edit_post_link('Изменить', '', '', '', 'td-admin-edit');
}
?>
<a href="<?php the_permalink() ?>" rel="bookmark" class="td-image-wrap" title="<?php the_title_attribute() ?>">
<?php
$post_thumbnail_url="";
if( get_the_post_thumbnail_url(null, 'medium_large') != false ) {
$post_thumbnail_url = get_the_post_thumbnail_url(null, 'medium_large');
} else {
$post_thumbnail_url = get_template_directory_uri() . '/images/no-thumb/medium_large.png';
}
?>
<img class="entry-thumb" src="<?php echo esc_url($post_thumbnail_url) ?>" alt="<?php the_title() ?>" title="<?php echo esc_attr(strip_tags(the_title())) ?>" />
</a>
</div>
<?php
$categories = get_the_category();
if( !empty( $categories ) ) {
$cat_link = get_category_link($categories[0]->cat_ID);
$cat_name = $categories[0]->name; ?>
<a class="td-post-category" href="<?php echo esc_url($cat_link) ?>"><?php echo esc_html($cat_name) ?></a>
<?php } ?>
</div>
<?php
$source = get_post_meta($post->ID, 'source', true);
if ($source) { ?>
<p>Источник: <? echo $source; ?></p>
<?php
} else {
// ничего не делать;
}
?>
<h3 class="entry-title td-module-title">
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute() ?>">
<?php the_title() ?>
</a>
</h3>
<div class="td-module-meta-info">
<div class="td-post-author-name">
<a href="<?php echo esc_url(get_author_posts_url(get_the_author_meta( 'ID' ))) ?>"><?php the_author() ?></a>
<span> - </span>
</div>
<span class="td-post-date">
<time class="entry-date updated td-module-date" datetime="<?php echo esc_html(date(DATE_W3C, get_the_time('U'))) ?>" ><?php the_time(get_option('date_format')) ?></time>
</span>
<div class="td-module-comments">
<a href="<?php comments_link() ?>">
<?php comments_number('0','1','%') ?>
</a>
</div>
</div>
</div>
</div>
<?php
if( $column_count == $column_break || $post_count == $wp_query->post_count ) { ?>
</div> <?php
$column_count = 1;
} else {
$column_count++;
}
$post_count++;
endwhile;
if( !$is_404 ) {
tagdiv_page_generator::get_pagination();
}
} else { ?>
<div class="no-results td-pb-padding-side">
<h2><?php esc_html_e('Нет постов для отображения', 'newspaper') ?></h2>
</div>
<?php }
Попробуйте это (предполагая, что ваше пользовательское поле ACF имеет тип текст),
$source = get_field('source', get_the_id());
.
Ответ или решение
Как добавить пользовательские метаданные на страницу архива/постов WordPress
Ваша задача по добавлению пользовательской метаинформации, такой как источник новостной статьи на странице архива или ленты постов, довольно распространена среди разработчиков на WordPress. Рассмотрим пошаговые действия для успешного выполнения этой задачи.
Шаг 1: Убедитесь, что пользовательское поле настроено правильно
Вы уже используете плагин Advanced Custom Fields (ACF) для создания пользовательского поля source
. Вам нужно убедиться, что его значение корректно сохраняется и отображается в редакторе постов. Вы можете проверить это следующим образом:
- Откройте любой пост в админке.
- Убедитесь, что поле
source
доступно и заполнено значением (например, URL или название источника).
Шаг 2: Измените код в файле loop-archive.php
После того как вы убедились, что значение поля хранится правильно, следующий шаг — отобразить его на странице архива. В вашем случае код, отвечающий за отображение пользовательского поля, выглядит следующим образом:
$source = get_post_meta($post->ID, 'source', true);
Это корректно, однако, в зависимости от настроек ACF, вам может потребоваться использовать метод get_field
, как предложено в вашем источнике:
$source = get_field('source', get_the_ID());
Шаг 3: Разместите код в нужном месте
Вы хотите отобразить источник рядом с датой и автором поста. Проверьте свою секцию с метаинформацией, где вы уже выводите автора и дату:
<div class="td-module-meta-info">
<div class="td-post-author-name">
<a href="<?php echo esc_url(get_author_posts_url(get_the_author_meta('ID'))) ?>"><?php the_author(); ?></a>
<span> - </span>
</div>
<span class="td-post-date">
<time class="entry-date updated td-module-date" datetime="<?php echo esc_html(date(DATE_W3C, get_the_time('U'))) ?>"><?php the_time(get_option('date_format')) ?></time>
</span>
Добавьте проверку и вывод вашего мета-поля source
сразу после этих строк:
<?php if ($source): ?>
<span class="td-post-source">Источник: <?php echo esc_html($source); ?></span>
<?php endif; ?>
Шаг 4: Проверка на уровне темы
Обязательно протестируйте изменения. Если источник не отображается, убедитесь, что:
- Включен плагин ACF, и данные правильно сохраняются.
- Обновите свои посты, чтобы значения поля были актуальными.
- Проверьте, что у вас нет конфликтов с кэшированием, если используете плагины кеширования.
Шаг 5: Оптимизация под SEO
Для SEO-оптимизации убедитесь, что:
- Заголовок источника описывает подобным образом — привлекательными и понятными словами.
- Используйте структурированные данные, если источники важны для вашего контента (например, с помощью
schema.org
). - Подумайте о добавлении атрибутов
rel="nofollow"
к вашим ссылкам на источники, если они не являются основными.
Заключение
Добавление пользовательских метаданных, как источник новости, может существенно улучшить вашу новостную ленту и сделать ее более информативной для пользователей. Следуя указанным выше шагам и рекомендациям, вы сможете успешно реализовать эту задачу. Не забывайте периодически проверять ваш сайт на наличие ошибок и обновлять плагины для оптимизации вашего контента.