首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress ACF:使用一个页面(带有特定的页面模板)作为CPT存档页面

问Wordpress ACF:使用一个页面(带有特定的页面模板)作为CPT存档页面
EN

Stack Overflow用户
提问于 2018-04-24 12:20:07
回答 2查看 1.1K关注 0票数 1

我使用ACF在两个区域创建具有独立灵活布局部分的页面,主页面部分区域和侧栏区域。

我有一个名为case-studies的CPT,并创建了一个名为case-studies的页面。我在CPT中设置了'has_archive' => false,,希望页面被使用,但是(我理解)这有一个层次结构,所以如果没有提供存档,那么它将加载我的home.php (这是我的新闻,post类型)。

是否有任何方法可以将页面用作CPT的存档?目前我能看到的唯一解决方案是使用ACF CPT选项页插件并将我创建的ACF字段附加到我的“案例研究存档”页面中,但是,我必须复制我的所有代码,以便它们能够调用正确的内容。例如:

the_field('field_name');到the_field('field_name', 'cpt_case-studies');

是否有人能够将页面用作CPT的归档文件,并为该页面分配模板,该页面既查询CPT帖子,又拥有该页面中的ACF字段?

非常感谢你的帮助。如果还有什么我能提供的,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-24 12:41:46

最好的方法是将has_archive参数设置为true,然后在主题中创建archive-case-studies.php模板。您仍然可以使用来自ACF的自定义字段。使用the_field()和the_get()时,第二个可接受的参数是post id,但这是根据当前全局对象自动设置的。

例如:

代码语言:javascript
复制
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <?php the_field( 'custom_field', $post->ID ); ?>

<?php endwhile; endif; ?>

与以下相同:

代码语言:javascript
复制
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <?php the_field( 'custom_field' ); ?>

<?php endwhile; endif; ?>

长话短说;使用带有自定义模板的归档页面,您将能够实现我认为您所追求的目标而没有问题。如果你是这样做的话,这要比滚动一些自定义的东西少得多,因为归档页面可能是一个痛苦的工作。

票数 2
EN

Stack Overflow用户

发布于 2018-04-24 15:13:21

在Daniel的答案的基础上,我创建了一个函数,它为我需要获取ID的所有页面创建了一个数组,以便将它们的内容添加到特定的归档页面中。

代码语言:javascript
复制
function getOtherPageID($page = null) 
{
    global $post; 
    $postIDs = [
        'case-studies' => 42, // 42 being the page ID of the content I need
    ];

    if(array_key_exists($page, $postIDs)) :
        $id = $postIDs[$page];
    endif;

    return $id;
}

通过在我的$id = getOtherPageID('case-studies');模板页面(或任何其他归档模板)中调用archive-case-studies.php,我能够获取所需的ID,然后将其添加到archive-case-studies.php字段中。然后,在每个对应的ACF字段调用中,我只需将$id添加到ACF字段调用:get_field('field_name', $id);。

希望这能帮到别人。

-最新消息

我没有输入post ID (在上面的例子中是42),而是将其修改为使用get_page_by_path();函数。因此,我的职能是:

代码语言:javascript
复制
function getOtherPageID($page = null) 
{
    global $post; 
    $postIDs = [
        'case-studies' => get_page_by_path( $page ),
    ];

    if(array_key_exists($page, $postIDs)) :
        $id = $postIDs[$page]->ID;
    endif;

    return $id;
}

这将得到post对象,然后将$id设置为post对象的ID,然后返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50001531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档