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

如何获取WordPress中上次访问文章的Post ID及自定义字段

解决感谢页面获取上次访问文章post_id的问题

嘿,我来帮你搞定这个需求!你现在的核心问题是:get_the_ID()在感谢页面只会返回当前感谢页面本身的ID,根本拿不到之前访问的那篇文章的ID,所以得换个方式把之前的post_id传递过去才行。下面给你两种靠谱的实现方案:

方案一:通过GET参数传递post_id

这种方式简单直接,重定向的时候把文章ID作为URL参数带过去,感谢页面再读取这个参数。

步骤1:修改重定向逻辑(添加到functions.php)

首先,你需要在那些需要重定向到感谢页面的文章触发重定向时,把当前文章的ID拼到跳转URL里:

add_action('template_redirect', function() {
    // 这里替换成你判断文章需要重定向的条件,比如某个分类/自定义字段
    if (is_single() && get_field('need_redirect')) {
        $target_post_id = get_the_ID();
        // 获取感谢页面的链接,把post_id作为参数传过去
        $thankyou_url = add_query_arg(
            'post_id', 
            $target_post_id, 
            get_permalink(get_page_by_path('thank-you')) // 替换成你的感谢页面别名
        );
        wp_redirect($thankyou_url);
        exit;
    }
});

步骤2:感谢页面处理逻辑

在感谢页面的模板文件里,读取URL参数里的post_id,验证合法性后再处理自定义字段:

// 先检查参数是否存在且合法
if (isset($_GET['post_id']) && is_numeric($_GET['post_id'])) {
    $previous_post_id = intval($_GET['post_id']);
    // 验证这个文章是否存在且已发布,防止恶意参数
    if (get_post_status($previous_post_id) === 'publish') {
        // 获取自定义字段和文章标题
        $product_tags = get_field('product_tags', $previous_post_id);
        $previous_post_title = get_the_title($previous_post_id);
        
        // 输出你要的预期效果
        echo "您访问了属于“自定义字段”分类下的“{$previous_post_title}”的内容。";
        
        // 你的条件判断逻辑
        if ($product_tags == 'action' && !is_user_logged_in()) {
            echo '<p>Not For you</p>';
        } else {
            echo '<p>Welcome</p>';
        }
    } else {
        echo '无效的访问记录,请先访问合法文章';
    }
} else {
    echo '请先访问相关文章后再进入此页面';
}

方案二:通过Session存储post_id(更隐蔽)

如果不想让用户看到URL里的post_id参数,可以用Session来存储,这种方式更隐蔽。

步骤1:开启Session(添加到functions.php)

首先要在WordPress里开启Session支持:

add_action('init', function() {
    if (!session_id()) {
        session_start();
    }
});

步骤2:存储post_id到Session(添加到functions.php)

重定向前把文章ID存到Session里:

add_action('template_redirect', function() {
    if (is_single() && get_field('need_redirect')) {
        $_SESSION['previous_post_id'] = get_the_ID();
        wp_redirect(get_permalink(get_page_by_path('thank-you')));
        exit;
    }
});

步骤3:感谢页面读取Session

在感谢页面模板里读取Session里的post_id,用完后可以清空避免重复显示:

if (isset($_SESSION['previous_post_id']) && is_numeric($_SESSION['previous_post_id'])) {
    $previous_post_id = intval($_SESSION['previous_post_id']);
    if (get_post_status($previous_post_id) === 'publish') {
        $product_tags = get_field('product_tags', $previous_post_id);
        $previous_post_title = get_the_title($previous_post_id);
        
        echo "您访问了属于“自定义字段”分类下的“{$previous_post_title}”的内容。";
        
        if ($product_tags == 'action' && !is_user_logged_in()) {
            echo '<p>Not For you</p>';
        } else {
            echo '<p>Welcome</p>';
        }
        
        // 清空Session,防止用户刷新感谢页面还显示之前的记录
        unset($_SESSION['previous_post_id']);
    } else {
        echo '无效的访问记录';
    }
} else {
    echo '请先访问相关文章';
}

注意事项

  • 一定要验证post_id的合法性,避免恶意用户传入无效ID或者恶意参数,用get_post_status()检查文章是否已发布是很有必要的。
  • 如果你用自定义字段判断哪些文章需要重定向,记得把get_field('need_redirect')替换成你实际的自定义字段键名。
  • 感谢页面的别名thank-you要替换成你自己的感谢页面的实际别名或ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:48:51