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

WooCommerce:当产品内容为空时,如何通过脚本(MySQL/PHP)交换内容与摘要

WooCommerce:当产品内容为空时,如何通过脚本(MySQL/PHP)交换内容与摘要

嘿,我完全懂你的需求——直接在数据库层面把数据理清楚,比前端临时绕逻辑靠谱多了,毕竟要定期更新目录,总不能每次都靠显示层面的临时处理凑数。下面分两种方案给你解决:

一、MySQL脚本方案(直接操作数据库)

你找到的那个交换脚本是针对所有产品的,我们只需要修改WHERE条件,让它仅在产品内容为空的时候执行交换。

重要提醒:操作数据库前一定要先备份!操作数据库前一定要先备份!操作数据库前一定要先备份!别嫌啰嗦,数据安全第一位!

修改后的SQL语句如下:

UPDATE wp_posts AS p
SET p.post_content = @temp := p.post_content,
    p.post_content = p.post_excerpt,
    p.post_excerpt = @temp
WHERE p.post_type = 'product'
  AND p.post_status = 'publish'
  AND (p.post_content = '' OR p.post_content IS NULL);

逻辑说明:

  • wp_posts是WordPress默认的文章表,如果你改了数据库表前缀,记得把wp_换成你的自定义前缀
  • (p.post_content = '' OR p.post_content IS NULL)确保只处理内容为空字符串或者NULL的产品(两种空值情况都覆盖到)
  • 用@temp临时变量先存原来的内容(虽然这里内容是空的,但语法上需要这个变量完成交换逻辑),然后把摘要赋值给内容,再把原来的空内容赋值给摘要

如果想先测试效果,避免误操作,可以在语句末尾加LIMIT 1,只修改一条数据验证结果:

UPDATE wp_posts AS p
SET p.post_content = @temp := p.post_content,
    p.post_content = p.post_excerpt,
    p.post_excerpt = @temp
WHERE p.post_type = 'product'
  AND p.post_status = 'publish'
  AND (p.post_content = '' OR p.post_content IS NULL)
LIMIT 1;

二、PHP脚本方案(通过WordPress/WooCommerce函数安全操作)

如果你不想直接碰数据库,也可以用WordPress内置函数来处理,这样更安全(会自动处理数据验证和相关钩子)。

你可以把这段代码放到主题的functions.php里,或者做成一个临时插件,执行一次后删掉就行:

function swap_product_content_and_excerpt() {
    // 获取所有内容为空的已发布产品
    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'posts_per_page' => -1, // 获取所有符合条件的产品
        'post_content'   => ''  // 筛选内容为空的产品
    );

    $products = new WP_Query($args);

    if ($products->have_posts()) {
        while ($products->have_posts()) {
            $products->the_post();
            
            $product_id = get_the_ID();
            $current_content = get_post_field('post_content', $product_id);
            $current_excerpt = get_post_field('post_excerpt', $product_id);

            // 双重确认内容为空再交换
            if (empty($current_content)) {
                wp_update_post(array(
                    'ID'           => $product_id,
                    'post_content' => $current_excerpt,
                    'post_excerpt' => $current_content
                ));
            }
        }
        wp_reset_postdata();
        echo '内容与摘要交换完成!';
    } else {
        echo '没有找到需要处理的产品!';
    }
}
// 执行函数
swap_product_content_and_excerpt();

使用说明:

  1. 把这段代码放到你的WordPress网站主题functions.php文件末尾,或者创建一个新的PHP文件(比如swap-content-excerpt.php)放到wp-content/plugins/目录下,激活这个临时插件
  2. 访问网站前台或后台任意页面,脚本就会自动执行
  3. 执行完成后,一定要删掉这段代码或者停用临时插件,避免每次访问都重复执行

最后小提醒

不管用哪种方法,都建议先在测试环境测试,或者先处理少量数据验证效果,确认没问题后再批量操作哦。

备注:内容来源于stack exchange,提问作者Anatole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:20:27