WordPress:添加文章元数据区块前如何判断指定元数据是否存在
问题解决方法
你的条件失效核心原因是**metadata_exists里的$post_id被单引号包裹**,导致它变成了字符串'$post_id'而非实际的文章ID变量。另外你不需要额外添加if/elseif语句,只需要修正现有条件即可。
修正后的代码方案
方案1:修复metadata_exists的变量引用
直接使用原代码里的$post->ID(确保$post对象在当前上下文有效):
<?php if ( 'extra-meta' === $section && metadata_exists('post', $post->ID, 'custom_meta') ) { ?> <li><?php echo do_shortcode( get_post_meta( $post->ID, 'custom_meta', true ) ); ?></li> <?php } ?>
方案2:直接通过get_post_meta判断值是否存在
当元数据不存在时,get_post_meta会返回空值,所以可以直接判断值是否非空,还能避免重复调用函数:
<?php $custom_meta = get_post_meta( $post->ID, 'custom_meta', true ); if ( 'extra-meta' === $section && !empty($custom_meta) ) { ?> <li><?php echo do_shortcode( $custom_meta ); ?></li> <?php } ?>
两种方案都能实现你要的效果——仅当文章存在custom_meta元数据时,才渲染对应的列表项区块,不需要额外添加分支语句。
内容的提问来源于stack exchange,提问作者Wanderlust Consulting
相关产品推荐
相关产品推荐

