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

如何在WooCommerce循环中获取自定义Tour类型产品的数据?

获取WooCommerce自定义产品类型的自定义字段数据

你已经通过WP_Query精准筛选出了tour类型的产品,接下来在循环里调取这些产品的自定义数据(比如日期、星期、激活状态)其实很简单,我给你两种常用的实现方式,适配不同的自定义字段存储场景:

方式一:直接调用WordPress的Post Meta函数

大部分自定义字段都会存在WordPress的post_meta表中,咱们可以用get_post_meta()直接获取:

先把你的查询和循环结合起来,完整代码示例如下:

$args = array( 
    'post_type' => 'product', 
    'posts_per_page' => 25, 
    'tax_query' => array( 
        array( 
            'taxonomy' => 'product_type', 
            'field' => 'slug', 
            'terms' => 'tour', 
        ), 
    ), 
); 
$products = new WP_Query($args);

// 开始产品循环
if ($products->have_posts()) :
    while ($products->have_posts()) : $products->the_post();
        // 获取当前产品的ID
        $product_id = get_the_ID();

        // 替换成你实际的自定义字段键,第三个参数true表示返回单个值
        $tour_date = get_post_meta($product_id, 'tour_date', true);
        $tour_weekday = get_post_meta($product_id, 'tour_weekday', true);
        $tour_status = get_post_meta($product_id, 'tour_active_status', true);

        // 输出或使用这些数据,这里做个简单的展示示例
        echo '<div class="tour-product">';
        echo '<h4>' . get_the_title() . '</h4>';
        if (!empty($tour_date)) {
            // 如果是时间戳或字符串日期,可以格式化输出
            echo '<p>出发日期: ' . date('Y年m月d日', strtotime($tour_date)) . '</p>';
        }
        if (!empty($tour_weekday)) {
            echo '<p>出发星期: ' . $tour_weekday . '</p>';
        }
        if (!empty($tour_status)) {
            // 根据状态值显示不同样式
            $status_text = $tour_status === 'active' ? '<span style="color:#2ecc71;">已激活</span>' : '<span style="color:#e74c3c;">已停用</span>';
            echo '<p>产品状态: ' . $status_text . '</p>';
        }
        echo '</div>';
    endwhile;
    // 一定要重置查询,避免影响后续的全局循环
    wp_reset_postdata();
else :
    echo '<p>暂时没有符合条件的旅游产品</p>';
endif;

方式二:使用WooCommerce产品对象(更规范)

如果你的自定义字段是通过WooCommerce官方方式添加的(比如用woocommerce_product_options_general_product_data钩子添加的字段),或者用了ACF这类和WooCommerce兼容的插件,更推荐用WooCommerce的产品对象来获取,这样更符合WooCommerce的开发规范:

只需要把循环里获取字段的部分替换成下面的代码:

// 获取当前产品的WooCommerce对象
$product = wc_get_product(get_the_ID());

// 用get_meta方法获取自定义字段,同样需要传入正确的字段键
$tour_date = $product->get_meta('tour_date');
$tour_weekday = $product->get_meta('tour_weekday');
$tour_status = $product->get_meta('tour_active_status');

注意事项

  • 一定要确保你使用的字段键和创建自定义字段时设置的完全一致,大小写敏感哦!
  • 如果是用ACF创建的字段,字段键就是你在ACF后台设置的"字段名称"(不是显示名称)。
  • 循环结束后记得调用wp_reset_postdata(),避免破坏WordPress的全局查询上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:02:50