Отобразить контент на одной странице

Вопрос или проблема

Я создаю тему для одной страницы, и у меня возникла проблема с 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(); ?>

Код выше не отображает ничего.

Вопрос

  • Как я могу отобразить свой контент, используя приведенный выше код?
  • Рекомендации по разработке тем для одной страницы на будущее?
  • В какую иерархию шаблонов страниц мне поместить мой код?

Мои страницы выглядят так

Wp Pages

Заранее спасибо.

‘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(), правильно извлекает и отображает данное содержимое. Это позволит вам успешно реализовать желаемую одностраничную тему.

Если у вас остались вопросы по этой теме или требуется более детальная информация, пожалуйста, не стесняйтесь обратиться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...