Расширенные Настраиваемые Поля - Получить пользовательские поля с родительской страницы
Я использую расширенные настраиваемые поля, облегчающие моему клиенту управление его контентом.
На всех моих дочерних и родительских страницах я хотел бы иметь одинаковое изображение заголовка и информацию на боковой панели.
Несмотря на то, что я хочу, чтобы "Родительская страница № 1" и "Родительская страница № 2" содержали различную информацию, и Клиент управляет этим с помощью расширенных настраиваемых полей.
Прямо сейчас клинт переходит на страницу каждого родителя и ребенка, чтобы заполнить информацию вручную - я бы хотел, чтобы он заполнялся только на родительской странице. Заставляя дочерние страницы получать информацию со своей родительской страницы.
Родительская страница #1
- Дочерняя страница №1 - Должна получать пользовательские значения полей из "Родительской страницы 1"
- Дочерняя страница №2 - Должна получить значения настраиваемых полей из "Родительской страницы 1"
- Дочерняя страница #3 - Должна получить значения настраиваемых полей из "Родительской страницы 1"
Родительская страница #2
- Дочерняя страница №1 - Должна получить значения настраиваемых полей из "Родительской страницы 2"
- Дочерняя страница №2 - Должна получить значения настраиваемых полей из "Родительской страницы 2"
- Дочерняя страница #3 - Должна получить значения настраиваемых полей из "Родительской страницы 2"
Итак, вот мой вопрос.
В моем "шаблоне родительской страницы" я использую следующее для создания изображения:
<img src="<?php the_field('header_image'); ?>">
Итак, как мне в моем "Шаблоне дочерней страницы" получить поле "заголовок-изображение" из родительская страница дочерней страницы?
3 answers
В своем цикле вы можете получить доступ к идентификатору родительской страницы с помощью $post->post_parent
.
Вам просто нужно передать это значение в качестве второго параметра:
<img src="<?php the_field('header_image', $post->post_parent ); ?>">
Как насчет:
<img src="<?php $parent_header_image = get_post_meta($post->post_parent, 'header_image', true); echo $parent_header_image;?>">
Очевидно, у меня нет вашей настройки, поэтому я не могу это проверить, но это кажется разумным. Обратите внимание, что это просто отображает ваши родительские данные во внешнем шаблоне, и они не будут отображаться или заполнять поля на экране администратора дочерней страницы.
К моменту включения файла шаблона запрос для страницы уже выполнен, и глобальная переменная $post содержит объект WP_Post. Вот пример дампа $post
:
WP_Post::__set_state(array(
'ID' => 3440,
'post_author' => '1',
'post_date' => '2013-08-19 13:06:04',
'post_date_gmt' => '2013-08-19 13:06:04',
'post_content' => '',
'post_title' => 'Models',
'post_excerpt' => '',
'post_status' => 'publish',
'comment_status' => 'open',
'ping_status' => 'closed',
'post_password' => '',
'post_name' => 'models',
'to_ping' => '',
'pinged' => '',
'post_modified' => '2013-08-23 14:32:57',
'post_modified_gmt' => '2013-08-23 14:32:57',
'post_content_filtered' => '',
'post_parent' => 3442,
'guid' => 'http://charlesclarkson.com/?page_id=3440',
'menu_order' => 0,
'post_type' => 'page',
'post_mime_type' => '',
'comment_count' => '0',
'filter' => 'raw',
'format_content' => NULL,
))
Как вы можете видеть из списка, в этом объекте есть свойство с именем post_parent
. Чтобы получить к нему доступ, используйте $post->post_parent
. На страницах верхнего уровня для родительской записи установлено значение '0'
.
В соответствии с документами ACF для the_field()
, существует второй параметр для передачи идентификатора записи в функция.
Предполагая, что код в шаблоне вашей страницы не связан с $post
:
<img src="<?php the_child_or_parent_image_src(); ?>">
<?php
function the_child_or_parent_image_src() {
global $post;
if ( $post->post_parent )
the_field( 'header_image', $post->post_parent );
the_field( 'header_image' );
}
?>
( Примечание: Код недостаточно хорошо протестирован.)