Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
WordPress 文章保存时同步 ACF 字段至自定义分类法教程_创想鸟

WordPress 文章保存时同步 ACF 字段至自定义分类法教程

WordPress 文章保存时同步 ACF 字段至自定义分类法教程

本教程详细阐述如何在 WordPress 中利用 save_post 钩子,将 Advanced Custom Fields (ACF) 的数据自动同步更新到自定义分类法(Taxonomy)。内容涵盖从 ACF 字段中提取数据、动态创建或更新分类法术语(Term),并将其关联到文章,尤其关注处理条件逻辑、多语言内容以及常见的编程陷阱,提供实用的代码示例和最佳实践,确保数据同步的准确性和效率。

在 wordpress 开发中,经常需要将用户通过 advanced custom fields (acf) 输入的数据,自动同步到自定义分类法中,以便更好地进行内容组织、筛选和查询。这种同步通常在文章(post)保存时触发。本文将深入探讨如何实现这一功能,包括处理简单的字段同步、复杂的条件逻辑以及多语言内容的同步。

核心概念与钩子

实现 ACF 字段与自定义分类法同步的核心是 WordPress 的 save_post 动作钩子。当文章被创建或更新时,此钩子会被触发,允许我们执行自定义逻辑。

save_post 钩子: 在文章保存时执行自定义函数。它接收 $post_id 作为参数,表示当前保存文章的 ID。$_POST[‘acf’]: 当 ACF 字段在前端或后端表单中提交时,其数据通常会通过 $_POST[‘acf’] 数组传递。ACF 字段的 ID(例如 field_611eb3690a472)是访问其值的键。wp_insert_term(): 用于创建新的分类法术语。如果术语已存在,它会返回现有术语的信息或错误。wp_set_object_terms(): 用于将一个或多个术语关联到指定对象(如文章)。

案例一:简单字段同步(汽车年份)

首先,我们来看一个相对简单的例子:将 ACF 中的汽车发布日期字段(field_611eb3690a472)的年份提取出来,并同步到 car_year 分类法中。

add_action('save_post', '__hp_frd_year');/** * 将 ACF 汽车发布日期字段的年份同步到 car_year 分类法 * * @param int $post_id 当前保存的文章ID */function __hp_frd_year($post_id) {    // 检查是否是自动保存或修订版本,避免不必要的执行    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {        return;    }    if (wp_is_post_revision($post_id)) {        return;    }    // 从 $_POST 中获取 ACF 字段值    $release_date = !empty($_POST['acf']['field_611eb3690a472']) ? $_POST['acf']['field_611eb3690a472'] : '';    // 如果发布日期为空,则不执行后续操作    if (empty($release_date)) {        return;    }    // 提取年份    $release_date_year = date("Y", strtotime($release_date));    // 尝试插入新术语    $new_term = wp_insert_term(        $release_date_year, // 术语名称        'car_year',         // 分类法名称        array(            'description' => '',            'slug'        => sanitize_title($release_date_year), // 生成安全的 slug        )    );    // 根据 wp_insert_term 的返回值处理结果    if (!is_wp_error($new_term)) {        // 术语成功创建,或已存在且返回其ID        wp_set_object_terms($post_id, $new_term['term_id'], 'car_year');    } else {        // 如果术语已存在,wp_insert_term 会返回 WP_Error 对象,其中包含 'term_exists' 错误码        if (isset($new_term->error_data['term_exists'])) {            wp_set_object_terms($post_id, (int) $new_term->error_data['term_exists'], 'car_year');        } else {            // 其他错误处理,例如日志记录            error_log('Error inserting car_year term: ' . $new_term->get_error_message());        }    }}

代码解析:

add_action(‘save_post’, ‘__hp_frd_year’);: 将我们的函数挂载到 save_post 钩子上。DOING_AUTOSAVE 和 wp_is_post_revision() 检查: 这是最佳实践,用于防止在自动保存或创建修订版本时重复执行逻辑,提高效率。$_POST[‘acf’][‘field_611eb3690a472’]: 直接从 $_POST 数组中获取 ACF 字段的值。date(“Y”, strtotime($release_date)): 将日期字符串转换为时间戳,再格式化为年份。wp_insert_term(): 尝试创建新的分类术语。如果术语 release_date_year 在 car_year 分类法中已经存在,它不会重复创建,而是返回现有术语的信息。错误处理 is_wp_error(): 检查 wp_insert_term 的返回值。如果不是 WP_Error 对象,表示术语操作成功,我们可以使用返回的 term_id。$new_term->error_data[‘term_exists’]: 如果术语已存在,WP_Error 对象会包含 term_exists 错误码,其值为已存在术语的 ID。我们将其转换为整数并使用。wp_set_object_terms(): 将获取到的术语 ID 关联到当前保存的文章 $post_id。

案例二:条件逻辑与多语言字段同步(汽车燃料类型)

第二个案例更为复杂,需要根据 ACF 字段的原始值进行条件判断,并将其转换为多语言格式(例如 [:el]ΒΕΝΖΙΝΗ[:en]UNLEADED[:]),然后同步到 car_fuel_type 分类法。

原始代码存在的问题在于:

$fuel_type_acf_lang == ”; 这是一个比较操作,而不是赋值操作,导致 $fuel_type_acf_lang 变量在后续的 if/else 结构中可能未被正确初始化或赋值。在 if/else 结构中,虽然对 $fuel_type_acf_lang 进行了赋值,但最终 wp_insert_term 调用的变量可能是错误的,或者逻辑不够清晰。没有考虑输入值本身就是多语言的情况(例如,用户输入的是英文 UNLEADED 而不是希腊文 ΒΕΝΖΙΝΗ)。

以下是修正后的代码:

add_action('save_post', '__hp_fuel_type');/** * 将 ACF 燃料类型字段同步到 car_fuel_type 分类法,并处理多语言转换 * * @param int $post_id 当前保存的文章ID */function __hp_fuel_type($post_id) {    // 检查是否是自动保存或修订版本    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {        return;    }    if (wp_is_post_revision($post_id)) {        return;    }    // 从 $_POST 中获取 ACF 字段值    // 使用 get_field() 或 get_field_object() 也可以,但对于直接提交的数据,$_POST 更直接    $fuel_type_acf_raw = !empty($_POST['acf']['field_612cfc339a8ba']) ? $_POST['acf']['field_612cfc339a8ba'] : '';    // 如果燃料类型为空,则不执行后续操作    if (empty($fuel_type_acf_raw)) {        wp_set_object_terms($post_id, [], 'car_fuel_type'); // 清除现有术语        return;    }    // 初始化最终要插入的术语名称    $fuel_type_term_name = '';    // 根据原始 ACF 值进行条件判断,并生成多语言术语名称    // 统一转换为大写进行比较,避免大小写问题    $normalized_fuel_type = mb_strtoupper($fuel_type_acf_raw, 'UTF-8'); // 确保多字节字符正确处理    switch ($normalized_fuel_type) {        case 'ΒΕΝΖΙΝΗ':        case 'UNLEADED':            $fuel_type_term_name = '[:el]ΒΕΝΖΙΝΗ[:en]UNLEADED[:]';            break;        case 'ΠΕΤΡΕΛΑΙΟ':        case 'DIESEL':            $fuel_type_term_name = '[:el]ΠΕΤΡΕΛΑΙΟ[:en]DIESEL[:]';            break;        case 'ΑΕΡΙΟ':        case 'GAS':            $fuel_type_term_name = '[:el]ΑΕΡΙΟ[:en]GAS[:]';            break;        case 'ΥΒΡΙΔΙΚΟ / ΒΕΝΖΙΝΗ':        case 'HYBRID / UNLEADED':            $fuel_type_term_name = '[:el]ΥΒΡΙΔΙΚΟ / ΒΕΝΖΙΝΗ[:en]HYBRID / UNLEADED[:]';            break;        case 'ΥΒΡΙΔΙΚΟ / ΠΕΤΡΕΛΑΙΟ':        case 'HYBRID / DIESEL':            $fuel_type_term_name = '[:el]ΥΒΡΙΔΙΚΟ / ΠΕΤΡΕΛΑΙΟ[:en]HYBRID / DIESEL[:]';            break;        case 'ΗΛΕΚΤΡΙΚΟ':        case 'ELECTRIC':            $fuel_type_term_name = '[:el]ΗΛΕΚΤΡΙΚΟ[:en]ELECTRIC[:]';            break;        default:            // 如果没有匹配到任何已知类型,可以选择不设置术语或设置一个默认/未知术语            error_log('Unknown fuel type received: ' . $fuel_type_acf_raw);            wp_set_object_terms($post_id, [], 'car_fuel_type'); // 清除现有术语            return; // 退出函数    }    // 如果最终术语名称为空,表示没有匹配到有效类型    if (empty($fuel_type_term_name)) {        wp_set_object_terms($post_id, [], 'car_fuel_type');        return;    }    // 尝试插入新术语    $new_term = wp_insert_term(        $fuel_type_term_name, // 术语名称 (已是多语言格式)        'car_fuel_type',      // 分类法名称        array(            'description' => '',            'slug'        => sanitize_title($fuel_type_term_name), // 生成安全的 slug        )    );    // 根据 wp_insert_term 的返回值处理结果    if (!is_wp_error($new_term)) {        wp_set_object_terms($post_id, $new_term['term_id'], 'car_fuel_type');    } else {        if (isset($new_term->error_data['term_exists'])) {            wp_set_object_terms($post_id, (int) $new_term->error_data['term_exists'], 'car_fuel_type');        } else {            error_log('Error inserting car_fuel_type term: ' . $new_term->get_error_message());        }    }}

关键修正和改进:

变量初始化和赋值: 使用 $fuel_type_acf_raw 存储原始输入,然后将处理后的多语言字符串赋值给 $fuel_type_term_name。这使得变量的职责更清晰,避免了原始代码中变量使用混乱的问题。更健壮的条件判断:使用 mb_strtoupper($fuel_type_acf_raw, ‘UTF-8’) 将输入字符串转换为大写,并确保正确处理多字节字符(如希腊文),从而使比较不区分大小写。使用 switch 语句替代嵌套的 if/else if 结构,使代码更具可读性和扩展性。每个 case 都同时检查希腊文和英文输入,例如 case ‘ΒΕΝΖΙΝΗ’: case ‘UNLEADED’:,这解决了原始问题中未考虑英文输入值的情况。多语言术语格式: [:el]ΒΕΝΖΙΝΗ[:en]UNLEADED[:] 是一种常见的WordPress多语言插件(如WPML或Polylang)使用的格式,它允许一个术语在不同语言下显示不同的名称。slug 生成: 使用 sanitize_title() 函数来生成术语的 slug,确保其符合URL规范。直接使用多语言字符串作为 slug 可能导致问题,虽然 wp_insert_term 会自动处理,但显式地 sanitize_title 更安全。空值处理: 如果原始 ACF 字段为空,我们选择清除该文章已关联的燃料类型术语 (wp_set_object_terms($post_id, [], ‘car_fuel_type’);),确保数据一致性。未知类型处理: 增加了 default 分支,用于处理未匹配到的燃料类型,可以进行错误日志记录,并选择清除术语或设置默认值。

注意事项与最佳实践

安全性(Nonce 验证): 在处理 $_POST 数据时,强烈建议添加 Nonce 验证,以防止 CSRF 攻击。这通常在表单提交时生成 Nonce 字段,并在 save_post 钩子中进行验证。

// 在函数开始处添加if (!isset($_POST['your_nonce_field']) || !wp_verify_nonce($_POST['your_nonce_field'], 'your_nonce_action')) {    return; // Nonce 验证失败,停止执行}

数据验证和清理: 在使用 $_POST 数据之前,始终进行验证和清理。例如,使用 sanitize_text_field() 等函数来清理输入。

避免重复操作: wp_insert_term() 会自动处理术语已存在的情况,但如果你的逻辑更复杂,例如需要更新术语的元数据,你可能需要先使用 term_exists() 来检查术语是否存在。

错误日志: 使用 error_log() 记录任何可能发生的错误,这对于调试至关重要。

性能考量: 对于大型网站,频繁地创建或更新术语可能会影响性能。确保你的逻辑高效,并只在必要时执行。

ACF 字段类型: 对于不同的 ACF 字段类型(如选择框、复选框、关系字段等),获取其值的方式可能有所不同。$_POST[‘acf’] 通常适用于文本、选择等简单字段。对于更复杂的字段,可能需要使用 ACF 提供的 get_field() 或 get_field_object() 函数。然而,在 save_post 钩子中,$_POST 通常包含表单提交的原始数据,直接访问是可行的。

分类法结构: 确保你的自定义分类法 car_year 和 car_fuel_type 已经注册。

多语言插件兼容性: 文中使用的 [:el]…[:en]…[:] 语法是 WPML 和 Polylang 等插件的标准多语言字符串格式。确保你的网站已安装并配置了相应的多语言插件,以便这些术语能正确显示。

总结

通过 save_post 钩子,我们可以实现 ACF 字段与自定义分类法的强大同步功能。无论是简单的年份提取,还是复杂的条件判断和多语言转换,理解 wp_insert_term() 和 wp_set_object_terms() 的用法,以及如何安全有效地处理 $_POST 数据,是构建健壮 WordPress 解决方案的关键。遵循最佳实践,如 Nonce 验证、数据清理和错误日志,将确保你的代码稳定可靠。

以上就是WordPress 文章保存时同步 ACF 字段至自定义分类法教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1264342.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
解决 Magento 2 静态资源 URL 中 pub 路径缺失问题
上一篇 2025年12月10日 08:19:29
WordPress:动态显示用户专属内容——判断文章作者与登录用户
下一篇 2025年12月10日 08:21:40

相关推荐

  • php switch语句怎么用_php中switch条件判断语句的用法示例

    答案:PHP中switch语句用于多条件判断,语法为switch(表达式){case值:代码;break;},通过松散比较匹配case值,执行对应代码块,遇到break跳出避免穿透,default处理无匹配情况。示例根据$day输出星期几,注意事项包括case值不可为表达式、需注意类型松散比较、省略…

    2026年9月21日
    000
  • 《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”

    《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”

    外媒comicbook报道,2025年是游戏界的辉煌之年,多款新作在metacritic上评分突破90分,并获得“必玩”徽章。 《哈迪斯2》以95分的成绩成为本年度评分最高的游戏,强势领跑年度最佳游戏(GOTY)的激烈竞争,独立游戏的全面崛起也成为今年最瞩目的行业亮点。 《哈迪斯2》:95分封神,战…

    2026年9月21日 • 用户投稿
    100
  • 《最终幻想7重生》制作人力挺NS2钥匙卡!开发者受益匪浅

    《最终幻想7重生》的联合制作人滨口直树(Naoki Hamaguchi)在最近接受Wccftech采访时,对任天堂Switch 2引入的游戏钥匙卡(Game Key Card)表达了积极态度。 他不仅回应了围绕该设计的争议,还大胆预测任天堂未来将大力推动这一新格式的发展,并指出其为游戏开发团队带来的…

    2026年9月21日
    000
  • Android Ksoap2序列化嵌套整数数组到.NET Web服务的解决方案

    本教程旨在解决Android Ksoap2在向.NET Web服务发送包含嵌套整数数组(如`ArrayList`)的自定义对象时遇到的序列化错误。核心解决方案包括将`ArrayList`替换为`Vector`,并为`Vector.class`添加显式Ksoap2类型映射,确保数据正确传输。 在And…

    2026年9月21日
    100
  • Laravel中的CSRF保护机制是什么?

    laravel通过生成和验证唯一的token来实现csrf保护。1)生成token并嵌入表单,2)验证提交的token是否与session中的token匹配,3)可将特定路由排除在csrf保护之外,4)使用@csrf指令生成token,5)中间件自动验证token,确保请求经过csrf验证。 Lar…

    2026年9月20日
    000
  • 如何在Laravel中配置多语言支持

    在laravel中配置多语言支持的核心步骤包括定义语言包、设置应用语言环境以及使用翻译函数。1. 创建语言文件:在resources/lang目录下为每种语言创建子目录(如en和zh-cn),并在其中定义php数组存储翻译字符串;2. 设置语言环境:通过config/app.php中的’…

    2026年9月20日
    000
  • 修复WordPress wp-settings.php 中致命错误的专业指南

    本文旨在解决WordPress网站中因核心文件损坏导致的wp-settings.php致命错误,特别是“Call to undefined function”问题。通过提供详细的步骤,指导用户安全地替换受损的wp-admin和wp-includes目录,从而恢复网站功能。文章强调了备份的重要性,并提…

    2026年9月20日
    100
  • 距发售仅剩一周!《无尽传说RE》Xbox实体版疑取消

    根据北美游戏零售商VGP发布的消息,《无尽传说 复刻版》Xbox平台的欧版实体版已在原定发售日前一周被正式取消。该零售商在Bluesky平台上发表声明表示:“我们遗憾地确认,已接到通知,《无尽传说 复刻版》Xbox Series X欧洲实体版本将不再推出。所有相关预订订单将会被取消,并启动退款流程。…

    2026年9月20日
    100
  • 如何在Laravel中使用批量赋值

    laravel中的批量赋值通过数组直接填充模型属性,提升开发效率。主要方式有:1. fill()方法,先创建实例再填充数据;2. create()方法,直接创建并填充。为防止安全风险,需在模型中使用$fillable或$guarded明确允许的字段。处理关联关系时,需定义关联并在相关模型设置$fil…

    2026年9月13日
    300
  • ThinkPHP的验证器怎么用?ThinkPHP如何验证表单数据?

    ThinkPHP的验证器怎么用?ThinkPHP如何验证表单数据?ThinkPHP的验证器怎么用?ThinkPHP如何验证表单数据?ThinkPHP的验证器怎么用?ThinkPHP如何验证表单数据?ThinkPHP的验证器怎么用?ThinkPHP如何验证表单数据?

    thinkphp验证器是用于检查用户提交数据是否符合预设规则的工具,保障数据有效性及应用安全。其通过定义规则类实现字段验证,支持内置规则、自定义规则及错误信息处理。1. 内置规则包括require、email、alphanum、length、unique等;2. 自定义规则可通过闭包、独立函数或va…

    2026年9月12日 • 用户投稿
    000
  • 任天堂Switch主机充电教程 教你如何为你的NS充电

    轻松掌握任天堂switch主机充电方法!很多新手玩家拿到switch后都会问:如何充电?别担心,本文将为您详细讲解switch的充电方式,让您快速上手。 主机电量显示:在主页菜单右上角,您可以找到电池图标,点击查看剩余电量百分比。 充满电时间:约3小时(主机休眠状态下)。 充电方法一:使用Ninte…

    2026年9月12日
    100
  • Java字符串加密:解决循环中提前返回导致的数字转换问题

    本文深入探讨java中将字符串转换为数字加密时,因`for`循环内不当的`return`语句导致程序提前终止,仅返回首个字符转换值的问题。通过分析原始代码的逻辑缺陷,提供了修正后的`getnumber`方法,确保所有字符都能正确处理并最终组合成完整的加密数字,并优化了`main`方法的调用逻辑,提升…

    2026年9月12日
    300
  • ThinkPHP的CSRF防护怎么做?ThinkPHP如何生成Token?

    ThinkPHP的CSRF防护怎么做?ThinkPHP如何生成Token?ThinkPHP的CSRF防护怎么做?ThinkPHP如何生成Token?ThinkPHP的CSRF防护怎么做?ThinkPHP如何生成Token?ThinkPHP的CSRF防护怎么做?ThinkPHP如何生成Token?

    thinkphp的csrf防护通过生成并验证唯一令牌实现。具体步骤如下:1.启用会话,配置中间件以支持token存储;2.在视图中使用{{ token() }}生成隐藏域,自动添加__token__字段;3.后端自动验证post/put/delete请求中的token,不匹配则抛出异常;4.ajax…

    2026年9月12日 • 用户投稿
    100
  • 任天堂switch被封禁BAN机错误代码大全 例如2181-4017、2124-4517

    如果您的任天堂switch显示以下错误代码,则表示您的主机已被封禁(俗称ban机): 很遗憾,目前没有办法解除此封禁,建议您购买一台新的switch主机。 以下是一些常见的Switch封禁错误代码及其原因: 2181-4017、2124-4517: 您的Switch主机因违反用户协议而被暂时禁止在线…

    2026年9月12日
    100
  • switch如何注册账号 任天堂NS游戏用户注册教程

    switch如何注册账号 任天堂NS游戏用户注册教程switch如何注册账号 任天堂NS游戏用户注册教程switch如何注册账号 任天堂NS游戏用户注册教程switch如何注册账号 任天堂NS游戏用户注册教程

    轻松注册你的任天堂switch账号,畅玩游戏!拥有任天堂账号才能下载游戏、保存存档等。准备好你的switch主机和网络连接,让我们开始吧! 首先,打开eShop,在账户界面点击“+”号添加新账户。 点击“下一步”继续。 选择你喜欢的头像。 输入账户名称。 点击“确定”。 如果你没有任天堂账号,选择“…

    2026年9月12日 • 用户投稿
    100
  • 《方舟生存飞升》新生物 “奥西顿” 首曝,11月中旬上线,《方舟终极生存者版》更新Switch 2

    《方舟生存飞升》新生物 “奥西顿” 首曝,11月中旬上线,《方舟终极生存者版》更新Switch 2《方舟生存飞升》新生物 “奥西顿” 首曝,11月中旬上线,《方舟终极生存者版》更新Switch 2《方舟生存飞升》新生物 “奥西顿” 首曝,11月中旬上线,《方舟终极生存者版》更新Switch 2《方舟生存飞升》新生物 “奥西顿” 首曝,11月中旬上线,《方舟终极生存者版》更新Switch 2

    阿拉特主星的极寒地带即将迎来一位全新霸主——由红色元素重塑、象征极致耐力与元素之力的巨型灵长类生物“奥西顿”,将于太平洋时间11月18日正式降临《方舟:生存飞升》。 曾被视作“失败的实验体”,如今的奥西顿已蜕变为掌控“冰封炼金术”的强大存在。它能在连泰坦都难以立足、“重生协议”也无法覆盖的极端环境中…

    2026年9月12日 • 用户投稿
    100
  • 《刺客信条:影》将于12月2日登陆Switch 2

    在经历了数月的猜测后,育碧终于正式宣布《刺客信条:影》将登陆switch 2平台。 《刺客信条:影》Switch 2版本确定于12月2日发售,支持触屏操作,让玩家能够更便捷地浏览菜单、地图以及管理藏身处。 该版本将包含游戏发售后在其他平台推出的所有更新内容,但不包括“淡路之爪”资料片,该DLC预计将…

    2026年9月12日
    300
  • WordPress开发:解决AJAX提交HTML内容中的反斜杠问题

    在wordpress开发中,通过ajax提交包含html标签(尤其是“标签)的内容时,可能会在php后端收到带有反斜杠的字符串,导致html渲染异常。本文将深入分析这一问题的原因,并提供使用`wp_unslash()`函数在php端正确处理并移除这些反斜杠的解决方案,确保html内容(如…

    2026年9月12日
    100
  • 数字豪华版首次打折! 《超级忍》DLC宣布加入《如龙》真岛吾朗

    sega于10月22日宣布,旗下忍者题材动作游戏《超级忍 复仇之斩击》的数字豪华版现正于任天堂eshop与ps store展开首次限时优惠。nintendo switch版本的折扣将持续至11月4日,而ps5/ps4版本则优惠至11月5日,两款平台均享有20%的折扣力度。 与此同时,官方也公开了数字…

    2026年9月12日
    100
  • 《无双深渊》《真三国无双:起源》联动 将推联动DLC

    光荣官博宣布旗下两款动作游戏——《无双深渊》与《真三国无双:起源》将展开联动,确认推出联动付费dlc!更多详情将逐步公开。 官博消息: 无双动作×肉鸽创新之作《无双深渊》正式宣布与《真三国无双:起源》开启联动!将推出专属联动付费DLC,敬请期待后续情报! 在9月26日17时30分举行的“真·三国无双…

    2026年9月12日
    100

发表回复

登录后才能评论
关注微信