通过在查询中排除当前文章 id,可确保 `get_posts` 返回的始终是其他文章的匹配项;若结果为空,则整个表格无需渲染,自然实现“仅一个结果时隐藏”的需求。
在 WordPress 自定义字段(如 ACF)开发中,常需比对当前文章与其他文章的字段值(例如检查邮箱是否重复)。你提供的函数逻辑正确,但存在一个关键问题:get_posts() 默认会包含当前文章本身,导致即使没有其他重复项,表格也总会显示一行(即当前文章),从而无法满足「仅当存在 其他 重复项时才显示表格」的需求。
最简洁、高效且符合 WordPress 最佳实践的解决方案,是在查询参数中直接排除当前文章 ID:
function samemailaddress($field) {
$emailcurrentpost = get_field('email');
$referencecurrentpost = get_field('reference');
// 排除当前文章,避免自身被纳入比对结果
global $post;
$tmp_post = $post;
$args = array(
'post_type' => 'reservation',
'posts_per_page' => -1,
'post__not_in' => array($tmp_post->ID), // ✅ 关键修改:排除当前文章
'post_status' => 'publish', // 建议显式指定状态,避免草稿/私密文章干扰
);
$myposts = get_posts($args);
// 仅当存在其他匹配文章时才渲染表格
if (!empty($myposts)) {
echo '| 关联编号(Reference) |
|---|
| ' . esc_html($reference) . ' |
✅ 关键改进说明:
⚠️ 注意事项:
此方案轻量、健壮、符合 WordPress 编码规范,无需额外计数或二次遍历,推荐作为标准实现方式。