Я хочу, чтобы заголовки страниц и отрывки отображались на home.php в определенном порядке.
-
22-10-2019 - |
Вопрос
В файл 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()
как ваше условное.