将模板关联到高级自定义字段的帖子类型

时间:2018-02-19 21:21:38

标签: php wordpress custom-post-type advanced-custom-fields

我正在尝试使用高级自定义字段插件,并将其与我编写的部分(可能不是正确的单词)相关联,该部分将显示自定义帖子类型中的字段。

如何将php文件与自定义帖子类型相关联?

目标是能够将部分内容嵌入帖子中。

这是我的部分内容: cta-partial.php

<?php
/*
Template Name: CTA-Partial
*/
?>
<!-- cta markup -->
<!-- if there is an article then load -->
<?php
    $args = array(
        'post_type' => 'cta_post_type'
    );
    $query = new WP_Query( $args ); ?>
    <?php if( $query->have_posts() ) : while( $query->have_posts() ) : 
$query->the_post();?> 
    </div>
</div>
<!-- end the markup so as to allow full-width -->
<div class="article" style="background-image: url('<?php the_field('cta_background'); ?>')">
    <div class="custom-background">
        <div class="columns small-12 medium-6 image-container">
            <div class="hide-for-medium">
                <img src="<?php the_field('cta_background'); ?>">
            </div>
        </div>
        <div class="columns small-12 medium-6 mobile-style">
            <h1> <?php the_field('cta_title');?></h1>
            <p><?php the_field('cta_text'); ?></p>
            <a href="<?php the_field('button_link');?>"><button><?php the_field('button_label')?></button></a>
        </div>
    </div>
</div>
<div class="row">
    <div class="columns small-12 medium-12 content-wrapper">
    <!-- continue content loop -->
    <?php endwhile; endif; wp_reset_postdata(); ?>

这是我想要渲染与我的自定义字段帖子类型相关联的php的文件。

以下是ACF的文档:https://www.advancedcustomfields.com/resources/ 我一直在搜索文档,我不确定它是否可行。感谢您的帮助到目前为止,仍在研究。

image of embedded cta in post

3 个答案:

答案 0 :(得分:0)

我假设你想要的是为该文件分配一个页面。您可以使用archive-template.php类型文件。

https://codex.wordpress.org/Creating_an_Archive_Index

答案 1 :(得分:0)

您可以将帖子ID(或用户ID,术语或其他字段)传递到ACF字段,以检索位于其他位置的字段。作为旁注,看起来WP_Query对此来说太过分了。试试这个:

<?php
  $cta_posts = get_posts( array(
    'posts_per_page' => 1,
    'post_type' => 'cta_post_type'
  ) );
  if( $cta_posts ){
    foreach( $cta_posts as $cta_post ):
    ?>
      <div class="article" style="background-image: url(<?php the_field( 'cta_background', $cta_post->ID ); ?>)">
        ...
      </div>
    <?php
    endforeach;
  }

我的posts_per_page假设您只想在页面上显示一个CTA。如果是这样的话,帖子类型也可能过度。您可能需要查看ACF options page,将字段放在选项页面上,然后使用以下命令调用它们:

<div class="article" style="background-image: url(<?php the_field( 'cta_background', 'option' ); ?>)">

答案 2 :(得分:0)

我认为您不需要在 cta-partial.php 部分中进行查询。

如果您使用的是<?php get_template_part('cta-partial.php'); ?>,则部分变量中没有分配的变量。

如果您改用<?php include( locate_template('cta-partial.php') ); ?>,则可以访问从页面或帖子分配的变量。

您可能需要 调整您的the_field()用法以获取当前帖子ID。像这样:

<?php the_field('cta_background', $page_or_post_id); ?>

只需在要调用部分代码的原始页面中设置$page_or_post_id