ACF custom field in <head>

时间:2015-10-02 作者:Sam

我通过ACF插件使用图像URL创建了一个图像字段。此字段显示在我的页面中。此字段允许管理员更改选定类的背景图像。

这是我在<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;

4 个回复
最合适的回答,由SO网友:jsonUK 整理而成

header.php 模板,您无法访问$post 变量

因此,您必须使用$wp_query, 如ACF论坛所述here.

尝试以下操作:

<?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>

SO网友:dswebsme

您不必在标题中添加循环来获得所需的结果。根据文档,这应该在循环之外工作:

<?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,请仔细检查以确保字段名正确命名为“background”,以排除输入错误的可能性。还要确保清除任何可能粘滞的缓存插件或本地缓存(CSS喜欢粘滞)。

如果这仍然给您带来麻烦,也许您可以通过ACF export导出字段,并将其粘贴到您的原始问题中,以便我进一步提供帮助。

SO网友:vol4ikman

您不必在wp循环中使用get\\u field函数。如果在wp\\u head()之前使用get\\u字段,则需要定义post id。代码必须如下所示:

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

SO网友:Stijn De Lathouwer

ACF返回什么?一个物体?还是URL?对于对象,您必须从对象中获取正确的URL/大小。

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

--

抱歉,我有点忘乎所以,增加了我的参与度:)根据使用get\\u字段的位置,使用post ID确实是必要的

相关推荐

Increase offset while looping

我正在编写一个自定义帖子插件,它将自定义帖子分组显示为选项卡。每组4个岗位。是否可以编写一个偏移量随每次循环而增加的查询?因此,结果将是:-第一个查询显示从1到4的帖子-第二个查询显示从5到8的帖子-第三个查询显示从9到12的帖子等。 <div class=\"official-matters-tabs\"> <?php $args = array(\'post_type\' => \'official-matters\', \'showp