Как отобразить содержимое страницы в шаблоне страницы?

13

На моем сайте WordPress я создал собственный шаблон страницы, который содержал пользовательский запрос [using WP_Query()]. С помощью этого запроса я могу получить сообщения определенной категории. Но я хочу показать содержимое страницы вместе с запрошенными постами.

Все будет так:
---------------------------

Заголовок страницы

содержание страницы

Заголовок запрашиваемой записи

запрашиваемое содержание сообщения
---------------------------

  • Что я могу сделать?
Mayeenul Ислам
источник
2
В чем проблема? Это шаблон страницы, поэтому у вас есть доступ к содержимому страницы. Например, с помощью другого отдельного запроса вы получаете доступ к определенному сообщению и, таким образом, можете выводить его содержимое. Так?
tfrommen
Пожалуйста, будьте терпеливы, прежде чем голосовать вниз. Я борюсь за это, а потом я нашел решение. Я попытался ответить на вопросы здесь и поделиться этой логикой с другими - я думаю, что это прояснит этот факт так, как я его ищу. Надеюсь, вопросы и ответы вам понятны.
Mayeenul Islam
Во-первых, я не понизил ваш вопрос. Во-вторых, спасибо, что поделились с нами своими знаниями. Вы абсолютно правы в этом. Я думаю, проблема в том, что этот вопрос было не так сложно решить для опытных пользователей / разработчиков WP, а также тот факт, что вы разместили вопрос в одиночку. Если вы хотите задавать вопросы и отвечать с самого начала, просто добавьте свой ответ / решение непосредственно на ту же страницу, на которой вы пишете свой вопрос. Под кнопкой « Задать вопрос» есть флажок « Ответить на свой вопрос» . Еще раз спасибо.
tfrommen
wp_reset_postdata()для спасения. Должно быть сделано после каждого пользовательского запроса .
Кайзер

Ответы:

21

Я использую две петли. Первый цикл предназначен для отображения содержимого страницы, а второй - для отображения содержимого запрошенного сообщения. Я прокомментировал в кодах, где это необходимо. Я подчеркнул в циклах, как Deckster0 сказал в поддержке WordPress, что the_content()работает только внутри цикла WordPress. Я помещаю эти коды в свой собственный шаблон:

<?php
/*
* Template Name: My Template
*/
get_header(); ?>

<div id="container">
    <div id="content" class="pageContent">

    <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Page Title -->
    <?php
    // TO SHOW THE PAGE CONTENTS
    while ( have_posts() ) : the_post(); ?> <!--Because the_content() works only inside a WP Loop -->
        <div class="entry-content-page">
            <?php the_content(); ?> <!-- Page Content -->
        </div><!-- .entry-content-page -->

    <?php
    endwhile; //resetting the page loop
    wp_reset_query(); //resetting the page query
    ?>

    <?php
    // TO SHOW THE POST CONTENTS
    ?>                        
        <?php
        $my_query = new WP_Query( 'cat=1' ); // I used a category id 1 as an example
        ?>
        <?php if ( $my_query->have_posts() ) : ?>
        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>

            <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Queried Post Title -->
            <div class="entry-content">
                <?php the_excerpt(); ?> <!-- Queried Post Excerpts -->
            </div><!-- .entry-content -->

        <?php endwhile; //resetting the post loop ?>

        </div><!-- #post-<?php the_ID(); ?> -->

        <?php
        wp_reset_postdata(); //resetting the post query
        endif;
        ?>

    </div><!-- #content -->         
</div><!-- #container -->
Mayeenul Ислам
источник
Этот второй запрос не должен быть внутри, if( have_posts() )потому что это утверждение всегда будет верным. Вы должны вызывать if( $my_query->have_posts() )после $my_query = new WP_Query( 'cat=1' );строк и аргументов, если вы хотите проверить, что запрос имеет результаты.
t31os
@ t31os ты прав. Это моя вина. Теперь исправил код к такому. Спасибо за идентификацию. :)
Mayeenul Islam
0

Для этого обычно используются две петли, но немного передозировка.

Каждый пост или страница дает вам супер-переменную $post. Вы когда-нибудь задумывались, почему ваши get_post_meta()работы с простыми $post->ID;)?

Поэтому, прежде чем начать WP_Query () , который получает ваши перечисленные сообщения, вы можете получить доступ к текущей PAGE- / пост-данные с $post->ID, $post->post_content, $post->guidи так далее.

В цикле эта переменная заполняется зацикленным постом. Чтобы сохранить его на потом, вы можете либо создать новую переменную

$temp_post = $post

// new WP_Query() + loop here

или позвоните по телефону

wp_reset_query ()

после листинга. Последняя функция должна вызываться в любом случае, чтобы гарантировать, что данные на боковой панели являются правильными для текущей страницы / сообщения.

simonthesorcerer
источник