You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress后台编辑页元框加载文章致ACF字段为空

问题原因与解决方案

你的问题核心是全局$post变量被覆盖,导致ACF读取字段时的上下文错误,误以为当前编辑的是循环中的vosooli文章,而非原本的自定义文章类型内容。以下是具体修复方案:

修复后的代码

<?php
global $post;
// 直接获取当前编辑文章的ID,避免依赖不安全的GET参数
$current_post_id = $post->ID;

$args = array(
    'posts_per_page' => -1,
    'post_type'      => 'vosooli',
    'meta_query'     => array(
        array(
            'key'   => 'parvande_id_invosolli',
            'value' => $current_post_id,
        ),
    ),
);

$myposts = get_posts( $args );

// 使用自定义变量$item循环,绝不覆盖全局$post
foreach ( $myposts as $item ) : ?>
    
    <?php $post_idm = $item->ID; ?>
    <?php $vaziat_vosoolyi = get_post_meta($item->ID, 'vosooli_status', true); ?>

    <a status="<?php echo esc_attr($vaziat_vosoolyi); ?>" class="listvosoole vosoolshode" href="<?php echo esc_url( 'https://example.com/vosooli-info.php?id=' . $post_idm ); ?>" >
        <?php $mablaaq = get_post_meta($item->ID, 'vosooli_mablaq', true); echo number_format($mablaaq, 0, '.', ','); ?>
        <span><?php echo esc_html($vaziat_vosoolyi); ?></span>
    </a>
    
<?php endforeach; ?>

关键修复点

  1. 避免覆盖全局$post:循环时用自定义变量$item替代$post,彻底切断对当前编辑文章上下文的干扰,ACF就能正常读取原文章的字段数据。
  2. 安全获取当前文章ID:直接从全局$post->ID获取,替代$_GET['post'],既避免参数篡改风险,又保证在后台编辑环境中的准确性。
  3. 移除不必要的全局状态操作:不再使用setup_postdata()和wp_reset_postdata(),因为没有修改全局$post,无需重置操作。
  4. 增加安全过滤:添加esc_attr()、esc_url()、esc_html()函数,符合WordPress安全规范,防止XSS漏洞。

内容的提问来源于stack exchange,提问作者Ahmad Karimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:33:33