Пользовательское поле ACF в <head>

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

Вот код, который я вставил между тегами <head></head> :

 <?php while ( have_posts() ) : the_post(); $background = get_field('background'); ?> <style> .site-header { background: url(<?php echo $background; ?>) no-repeat center; background-size: cover; } </style> <?php endwhile; // end of the loop. ?> 

URL-адрес появляется через источник. Что я делаю не так? Я понимаю, что ACF не работает за пределами цикла, поэтому я добавил цикл в <head> .

Вот экспорт ACF:

 if( function_exists('acf_add_local_field_group') ): acf_add_local_field_group(array ( 'key' => 'group_560e6c0620487', 'title' => 'Header Background', 'fields' => array ( array ( 'key' => 'field_560e6c0ed9ca8', 'label' => 'Background Image', 'name' => 'background', 'type' => 'image', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array ( 'width' => '', 'class' => '', 'id' => '', ), 'return_format' => 'url', 'preview_size' => 'thumbnail', 'library' => 'all', 'min_width' => '', 'min_height' => '', 'min_size' => '', 'max_width' => '', 'max_height' => '', 'max_size' => '', 'mime_types' => '', ), ), 'location' => array ( array ( array ( 'param' => 'page_type', 'operator' => '==', 'value' => 'top_level', ), ), ), 'menu_order' => 0, 'position' => 'normal', 'style' => 'default', 'label_placement' => 'top', 'instruction_placement' => 'label', 'hide_on_screen' => '', 'active' => 1, 'description' => '', )); endif; 

В шаблоне header.php вы не можете получить доступ к переменной $post .

Поэтому вам нужно будет сопоставить его с помощью $wp_query , как указано на форуме ACF здесь .

Попробуй это:

 <?php global $wp_query; $post = $wp_query->post; $background = get_field('background', $post->ID); ?> <style> .site-header { background: url(<?php echo $background; ?>) no-repeat center; background-size: cover; } </style> 

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

 <?php // using $post from the global scope (not within loop) - your setup may vary $background = get_field('background', $post->ID); ?> <style> .site-header { background: url(<?php echo $background; ?>) no-repeat center; background-size: cover; } </style> 

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

Если вы все еще видите пустой URL-адрес в этом пробеле, проверьте, правильно ли указано имя поля «фон», чтобы исключить возможность опечаток. Также обязательно очистите любые кеширующие плагины или локальный кеш, которые могут быть прикреплены (CSS любит придерживаться).

Если это все еще вызывает проблемы, возможно, вы можете экспортировать поле через ACF Export и вставить его в свой исходный вопрос, чтобы я мог помочь дальше.

Вам не нужно использовать функцию get_field внутри цикла wp. Если вы используете get_field перед wp_head (), вам нужно определить post id. Ваш код должен быть примерно таким:

 $bg = get_field('fieldname', $post->ID): 

Что такое ACF? Объект? Или URL? С помощью объекта вы должны получить правильный URL / размер из объекта.

http://www.advancedcustomfields.com/resources/image/

Извините, немного увлекся увеличением моего SO-участия 🙂 Использование идентификатора сообщения действительно необходимо, в зависимости от того, где вы используете get_field