Вопрос или проблема
Я создаю тему для одной страницы, и у меня возникла проблема с get_post_meta()
Проблема
Код ниже не работает, и я ничего не вижу на сайте, так как он пустой. Вот мой index.php
.
<?php get_header(); ?>
<?php
global $query_string, $post;
query_posts($query_string . "post_type=page&post_status=publish&posts_per_page=9");
if ( have_posts() ) : while ( have_posts() ) : the_post();
$home = get_post_meta($post->ID, 'home', true);
$about = get_post_meta($post->ID, 'about', true);
$contact = get_post_meta($post->ID, 'contact', true);
$services = get_post_meta($post->ID, 'services', true);
?>
<?php if ( $home ) : ?>
<div id="home" class="borderline">
<?php the_content(); ?>
</div>
<?php endif; ?>
<?php if ( $about ) : ?>
<section class="about-us" id="about-us">
<div class="container">
<div class="row">
<div class="col-md-12">
<?php the_content(); ?>
</div>
</div>
</div>
</section>
<?php endif; ?>
<?php endwhile; endif; ?>
<?php get_footer(); ?>
Код выше не отображает ничего.
Вопрос
- Как я могу отобразить свой контент, используя приведенный выше код?
- Рекомендации по разработке тем для одной страницы на будущее?
- В какую иерархию шаблонов страниц мне поместить мой код?
Мои страницы выглядят так
Заранее спасибо.
‘Ace’
Если вы не создали метаполя с названиями ‘home’, ‘about’, ‘contact’ и ‘services’ в functions.php
с помощью add_post_meta
, ваши вызовы к get_post_meta
всегда будут возвращать false. Поэтому, если вы позже будете проверять, являются ли они истинными, ответ будет ‘нет’, и ничего не будет отображаться.
Ответ или решение
Как отобразить контент на одной странице
Создание темы для единственной страницы в WordPress может быть сложным, особенно когда дело касается правильного извлечения и отображения метаданных. В вашем случае проблема заключается в использованном коде get_post_meta()
, который не отображает никакое содержимое на веб-сайте. Давайте рассмотрим возможные решения и рекомендации.
1. Проблема с использованием get_post_meta()
В вашем коде вы пытаетесь получить метаданные страниц с помощью функции get_post_meta()
для ключей ‘home’, ‘about’, ‘contact’ и ‘services’. Однако, если вы не создали эти метаданные с помощью add_post_meta()
или не назначили их в интерфейсе редактирования страниц, функция get_post_meta()
всегда будет возвращать false
или пустое значение.
Решение:
Убедитесь, что метаданные действительно существуют. Например, вы можете добавить их в functions.php
следующим образом:
function add_custom_meta_boxes() {
add_meta_box( 'custom_meta_box', 'Meta Box', 'custom_meta_box_callback', 'page', 'normal', 'high' );
}
add_action( 'add_meta_boxes', 'add_custom_meta_boxes' );
function custom_meta_box_callback( $post ) {
// Добавьте поля для пользовательских метаданных
wp_nonce_field( 'custom_meta_box_nonce', 'meta_box_nonce' );
$home = get_post_meta( $post->ID, 'home', true );
$about = get_post_meta( $post->ID, 'about', true );
echo '<label for="home">Home:</label>';
echo '<input type="text" id="home" name="home" value="' . esc_attr( $home ) . '" size="25" />';
// Проделайте то же самое для 'about', 'contact', 'services'
}
function save_custom_meta_data( $post_id ) {
if ( ! isset( $_POST['meta_box_nonce'] ) ) {
return;
}
if ( ! wp_verify_nonce( $_POST['meta_box_nonce'], 'custom_meta_box_nonce' ) ) {
return;
}
// Сохраните данные
update_post_meta( $post_id, 'home', sanitize_text_field( $_POST['home'] ) );
// Проделайте то же самое для 'about', 'contact', 'services'
}
add_action( 'save_post', 'save_custom_meta_data' );
2. Отображение контента на странице
Ваш текущий код выглядит следующим образом:
<?php if ( $home ) : ?>
<div id="home" class="borderline">
<?php the_content(); ?>
</div>
<?php endif; ?>
Вместо the_content()
, вам следует использовать get_the_content()
или сохранить и затем отобразить индивидуальные метаданные, если они существуют. Например:
<div id="home" class="borderline">
<?php echo $home ? esc_html( $home ) : ''; ?>
</div>
3. Структура страниц и шаблонов
Для реализации темы одной страницы вам следует использовать файл page.php
в качестве макета. Однако, если вы хотите, чтобы это было не просто стандартное представление страницы, а именно одностраничное, вы можете создать собственный шаблон. Например:
/*
Template Name: Single Page Template
*/
Используйте данный шаблон при создании страницы в админке WordPress. Убедитесь, что в этой странице выбрана созданная вами тема.
Заключение
Создание одностраничной темы в WordPress требует правильного использования пользовательских метаданных и функциональности WordPress. Убедитесь, что все метаданные созданы и сохранены верно, а код, использующий get_post_meta()
, правильно извлекает и отображает данное содержимое. Это позволит вам успешно реализовать желаемую одностраничную тему.
Если у вас остались вопросы по этой теме или требуется более детальная информация, пожалуйста, не стесняйтесь обратиться за помощью.