Я хочу, чтобы заголовки страниц и отрывки отображались на home.php в определенном порядке.

wordpress.stackexchange https://wordpress.stackexchange.com/questions/19461

Вопрос

В файл function.php я добавил следующий код:

add_post_type_support( 'page', 'excerpt' );

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

На главной странице моего файла home.php эти три модуля покажут заголовки и отрывки страниц, на которые я добавил отрывок.Редактору должно быть разрешено в любой момент изменить место размещения или страницу, чтобы любая существующая страница теоретически могла стать модулем на главной странице.

Например, у меня есть страница «О нас», «Новые пациенты» и «Услуги», на всех трех из которых я добавил текст в поле выдержки (я оставлю все остальные поля выдержки пустыми на страницах, которые не обязательно должны отображаться на главной странице).В файле home.php я хочу, чтобы в том порядке, который я только что перечислил, заголовок и отрывок каждой страницы отображались в виде трех столбцов.

Вот как я собираюсь это стилизовать: http://i.stack.imgur.com/jOPb0.png

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

Я создал два настраиваемых поля под названием home_widget и order. home_widget равно либо true, тогда как order соответствует порядку, в котором они должны появиться на странице.

Этот код неверен, но я ищу аналогичную логику:

<?php
  $pageExcerpt = get_the_excerpt(); 
  if (is_page() && $pageExcerpt !== '') {
    the_excerpt();
  }
?>

Другими словами, если страница существует И у нее есть отрывок, тогда вызывайте the_excerpt(), но делайте это в том порядке, который я определяю путем ввода настраиваемого поля.Это позволяет осуществлять динамическую вставку по мере необходимости.

Как мне написать этот код, чтобы он работал так, как я сказал?

Это было полезно?

Решение 2

Сначала Вик посоветовал мне изучить Статья WP_Query на сайте WordPress.Это было очень сложно понять, и я поискал в Интернете статьи, которые могли бы дать мне более быстрый ответ, но не смог найти ничего подходящего.

Это похоже на ответ Вика, но отличается от него, но я понял это только изучив новую статью, только что опубликованную на Журнал Smashing Magazine о том, как создать медиа-сайт на WordPress.Я бы по-прежнему предпочитал запрашивать, содержит ли страница отрывок или нет, и показывать только эту страницу, но на данный момент это хорошее решение.

<?php
    // Get the pages with excerpts
  $excerpt = new WP_Query(
    array(
        'post_type' => 'page', // Tell WordPress which post type we want
        'posts_per_page' => '3', // Show the first 3
        'orderby' => 'meta_value', // Order by meta_key, defined on next line
        'meta_key' => 'order', // Look for numerical value in this key
        'order' => 'ASC', // Ascending order
        'meta_query' => array( // Return only pages with home_widget meta key set to true
            array(
                'key' => 'home_widget',
                'value' => 'true',
                )
            )
        )
    );
?>

<ul class="excerpt">
    <?php //Start new loop looking for pages only with $excerpt from above 
          while ( $excerpt->have_posts() ) : $excerpt->the_post(); ?>
    <li class="module">
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <p><?php the_excerpt(); ?></p>
    </li>
    <?php endwhile; ?>
</ul>

Другие советы

Если у вас нет особой причины иметь значения порядка мета-полей, это было бы излишним.

Вместо этого оставьте отрывок для страниц и добавьте мета-поле под названием «intro_content» (или что-то в этом роде).

Затем в запросе home.php вы можете легко получить эту информацию и упорядочить ее по своему усмотрению, используя HTML.

Например:

// replace 1, 2, 3, with actual page ID's
$about_meta = get_post_meta( 1, 'intro_content');
$new_patients_meta = get_post_meta( 2, 'intro_content'); 
$service_meta = get_post_meta( 3, 'intro_content'); 

// div styles and echo the title + the above or whatever

http://codex.wordpress.org/Function_Reference/get_post_meta

Добавлено это после вашего комментария/редактирования.

Чтобы заказать метабокс, вы можете добавить еще один с числовым значением или, что еще лучше, добавить раскрывающийся список (например, «order_value_dropdown»).

Таким образом, в вашем запросе вы можете запросить порядок по значению раскрывающегося списка.Например :

 $order_meta = get_post_meta( 3, 'order_value_dropdown'); 
 if ($order_meta = 1 )
 //grab the intro_content meta from that post
 if ($order_meta = 2 )
 //grab the intro_content meta from that post
 // etc, etc

Одна проблема:

"На первой странице, в моем файле home.php".

А home.php файл шаблона нет тот Титульная страница шаблон;скорее, это Индекс сообщений в блоге шаблон.В Титульная страница шаблон front-page.php.

Вы никогда не должны видеть оба is_home() и is_page() возвращаться true в то же время.

Таким образом, вы должны использовать front-page.php в качестве файла шаблона главной страницы, и вы должны использовать is_front_page() как ваше условное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top