【问题标题】:Wordpress Advanced Custom Fields display field not working in loopWordpress 高级自定义字段显示字段不循环工作
【发布时间】:2016-08-12 04:30:24
【问题描述】:

我在 Wordpress 中使用高级自定义字段。 我有一个名为 VIDEOS 的自定义帖子类型,它有两个字段 - video_linkvideo_artist

我可以调用并输出 video_link 字段,但我似乎无法使用以下代码显示“video_artist”字段...

<?php 
   $posts = get_posts(array(
   'post_type'          => 'videos',
   'posts_per_page'     => -1
   )
   ));                  
   if( $posts ): ?>
<?php foreach( $posts as $post ): 
   setup_postdata( $post )                  
   ?>
<?php echo wp_oembed_get( get_field( 'video_link' ) ); ?>
<?php the_title(); ?>
<?php the_field('video_artist'); ?>
</div>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

其实这行……

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

...破坏站点并且在它出现后什么都不显示。没有任何类型的 html。

【问题讨论】:

  • 试试get_post_meta()&lt;?php echo get_post_meta($post-&gt;ID, 'video_artist', true); ?&gt;
  • 你尝试过 $posts 变量上的 var_dump 吗?此外,如果您进入数据库,您可能需要仔细检查实际的元值(这将是完全确认正确的字段名称是 video_artist 的最佳方法。我会这样做的方法是获取您的帖子 ID,去进入MySQL(或phpMyAdmin)并尝试“SELECT * FROM wp_postmeta WHERE post_id = '{YOUR_ID}'”,它将输出该帖子的所有元字段。您可以100%确认您是否应该看到一个值以及是否元键是正确的。这应该让你开始。
  • 只是做了一个 var-dump,根本没有提到 video_artist 字段。 @米勒媒体
  • 也许没有名称为 video_artist 的自定义字段。添加简单检查:&lt;?php if (get_field('video_artist')) the_field('video_artist'); ?&gt;Here 是详细信息。
  • 一张支票只打印出每个帖子的“数组”一词。

标签: php wordpress advanced-custom-fields


【解决方案1】:

它与您的代码或多或少相同,刚刚经过测试,并且运行良好

正如@admcfadn 所说,您是在wordpress 循环中的注释,因此您需要将帖子ID 添加为the_field 的参数

$posts = get_posts(array(
    'post_type'          => 'videos',
    'posts_per_page'     => -1
));       


if( $posts ): 

    foreach( $posts as $post ): 
        setup_postdata( $post );               


        the_title(); 

        the_field('video_link', $post->ID);

        the_field('video_artist', $post->ID);

     endforeach;
     wp_reset_postdata();

endif; 

如果您喜欢在the_field 中使用不带 arg 的循环,则如下所示:

$options = array(
    'post_type'          => 'videos',
    'posts_per_page'     => -1
);

$query = new WP_Query( $options );

if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); 

    the_title(); 

    the_field('video_link');

    the_field('video_artist');

endwhile; endif;

ps:你不需要在每一行都使用&lt;?php?&gt;

【讨论】:

  • 感谢您的帮助。所以你的代码有效,但它只显示最新的帖子。如何让它显示每个帖子?如果我有 200 个帖子,我希望它显示全部 200 个,而不仅仅是 1 个。
  • 实际上,在第一个值之后,页面上根本没有呈现任何代码。所以整个网站,页脚/页面的其余部分现在在代码中都是空白的。
  • post_per_page =&gt; -1 的 2 个版本将显示您所有的视频帖子。您可以将此值设置为 200 以将其限制为 200。
  • 你的代码应该有问题,但没有更多信息,我帮不了你
【解决方案2】:
$post->the_field('video_artist');

您使用的是 get_posts,而不是 wp_query,因此您可能需要通过 $post 引用变量。

和/或使用以下方法对其进行故障排除:

the_field('video_artist', $post->ID); 

如果适合你,可能会得到。

或者……

$baz = get_field( 'video_artist' ); echo $baz;

此外,您似乎在 setup_postdata( $post ) 之后缺少一个分号,并且在 get_posts 之后有一个额外的右括号

【讨论】:

  • the_field('video_artist', $post->ID);应该给你。
  • 或... $baz = get_field('video_artist');回声 $baz; ?
  • 您在 setup_postdata( $post ) 之后还缺少一个分号
  • 这也只是输出单词'array'而不是每个帖子的字段内容。
  • 您可以在数组上使用 print_r() 或 var_dump() 来找出里面的内容。这个应该可以工作: the_field('video_artist', $post->ID);您使用的是中继器字段吗?
猜你喜欢
  • 2018-08-26
  • 2016-09-23
  • 1970-01-01
  • 2020-07-08
  • 2017-01-14
  • 1970-01-01
  • 2013-11-25
  • 2012-08-10
  • 2015-01-21
相关资源
最近更新 更多