Wordpress ACF:使用页面(具有特定页面模板)作为 CPT 存档页面
Wordpress ACF: Using a page (with a specific page template) as a CPT archive page
我正在使用 ACF 在两个区域创建具有独立灵活布局部分的页面,主要页面部分区域和侧边栏区域。
我有一个名为 case-studies
的 CPT,并创建了一个名为 case-studies
的页面。我在 CPT 中设置了 'has_archive' => false,
,希望该页面被使用,但是(我理解)这有一个层次结构,所以如果没有给出存档,那么它将加载我的 home.php (这就是我在新闻中使用的 posts post 类型)。
有什么方法可以将页面用作 CPT 的存档吗?目前我能看到的唯一解决方案是使用 ACF CPT Options Pages 插件并将我创建的 ACF 字段附加到我的 'Case Studies Archive' 页面但是,我必须复制我的所有代码以便它们可以称为正确的内容。例如:
the_field('field_name');
到 the_field('field_name', 'cpt_case-studies');
有没有人能够使用一个页面作为 CPT 的存档,并为页面分配一个模板,该模板既查询 CPT posts 又从页面中获取 ACF 字段?
非常感谢您的帮助。如果还有什么我可以提供的,请告诉我。
最好的方法是将 has_archive
参数设置为 true
,然后在您的主题中创建一个 archive-case-studies.php
模板。您仍然可以使用 ACF 中的自定义字段。当您使用 the_field()
and the_get()
时,第二个接受的参数是 post id,但这是根据当前全局对象自动设置的。
例如:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_field( 'custom_field', $post->ID ); ?>
<?php endwhile; endif; ?>
等同于:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_field( 'custom_field' ); ?>
<?php endwhile; endif; ?>
长话短说;使用带有自定义模板的存档页面,您将能够毫无问题地实现我认为您所追求的目标。如果你这样做,它比滚动自定义的东西要少得多,因为归档页面可能会很痛苦。
基于 Daniel James 的回答,我创建了一个函数,其中包含一个数组,其中包含我需要获取 ID 以将其内容添加到特定存档页面的所有页面。
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;
}
通过在我的 archive-case-studies.php
模板页面(或任何其他存档模板)中调用 $id = getOtherPageID('case-studies');
,我能够获取我需要的 ID,然后将其添加到 ACF 字段中。然后在每个相应的 ACF 字段调用中,我只需将 $id
添加到 ACF 字段调用中:get_field('field_name', $id);
希望这对其他人有所帮助。
----更新----
我没有输入 post ID(在上面的例子中是 42),而是修改为使用 get_page_by_path();
函数。因此,我的函数是:
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,然后返回。
我正在使用 ACF 在两个区域创建具有独立灵活布局部分的页面,主要页面部分区域和侧边栏区域。
我有一个名为 case-studies
的 CPT,并创建了一个名为 case-studies
的页面。我在 CPT 中设置了 'has_archive' => false,
,希望该页面被使用,但是(我理解)这有一个层次结构,所以如果没有给出存档,那么它将加载我的 home.php (这就是我在新闻中使用的 posts post 类型)。
有什么方法可以将页面用作 CPT 的存档吗?目前我能看到的唯一解决方案是使用 ACF CPT Options Pages 插件并将我创建的 ACF 字段附加到我的 'Case Studies Archive' 页面但是,我必须复制我的所有代码以便它们可以称为正确的内容。例如:
the_field('field_name');
到 the_field('field_name', 'cpt_case-studies');
有没有人能够使用一个页面作为 CPT 的存档,并为页面分配一个模板,该模板既查询 CPT posts 又从页面中获取 ACF 字段?
非常感谢您的帮助。如果还有什么我可以提供的,请告诉我。
最好的方法是将 has_archive
参数设置为 true
,然后在您的主题中创建一个 archive-case-studies.php
模板。您仍然可以使用 ACF 中的自定义字段。当您使用 the_field()
and the_get()
时,第二个接受的参数是 post id,但这是根据当前全局对象自动设置的。
例如:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_field( 'custom_field', $post->ID ); ?>
<?php endwhile; endif; ?>
等同于:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_field( 'custom_field' ); ?>
<?php endwhile; endif; ?>
长话短说;使用带有自定义模板的存档页面,您将能够毫无问题地实现我认为您所追求的目标。如果你这样做,它比滚动自定义的东西要少得多,因为归档页面可能会很痛苦。
基于 Daniel James 的回答,我创建了一个函数,其中包含一个数组,其中包含我需要获取 ID 以将其内容添加到特定存档页面的所有页面。
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;
}
通过在我的 archive-case-studies.php
模板页面(或任何其他存档模板)中调用 $id = getOtherPageID('case-studies');
,我能够获取我需要的 ID,然后将其添加到 ACF 字段中。然后在每个相应的 ACF 字段调用中,我只需将 $id
添加到 ACF 字段调用中:get_field('field_name', $id);
希望这对其他人有所帮助。
----更新----
我没有输入 post ID(在上面的例子中是 42),而是修改为使用 get_page_by_path();
函数。因此,我的函数是:
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,然后返回。