【问题标题】:Woocommerce 5.1.0 - Insert Text BETWEEN Product Title and the PriceWoocommerce 5.1.0 - 在产品标题和价格之间插入文本
【发布时间】:2026-01-05 10:25:01
【问题描述】:

我使用以下代码(添加在 functions.php 文件中)向管理产品添加了一个带有自定义输入字段的 Metabox:

// ****************************** COUNTRY ******************************** 
// /*
// |--------------------------------------------------------------------------
// | ADD CUSTOM PRODUCT META BOX - PAIS made in 10:37 07.10.2020
// | WOOCOMMERCE - PRODUTOS - EDITAR PRODUTO 
// |--------------------------------------------------------------------------
// */
    add_action( 'add_meta_boxes', 'add_product_metas_box_country', 50 );
    function add_product_metas_box_country(){
    add_meta_box( "options-country", __("Country Name"),'product_metas_box_country_content_callback', 'product', 'normal', 'high' );
   }
// /*
// |--------------------------------------------------------------------------
// | ADD CUSTOM PRODUCT META BOX HTML INPUT - PAIS made in 10:37 07.10.2020
// | WOOCOMMERCE - PRODUTOS - EDITAR PRODUTO 
// |--------------------------------------------------------------------------
// */
    function product_metas_box_country_content_callback( $post ) {
    $value = get_post_meta( $post->ID, 'country', true );

    echo '<div id="mdiv">
    <input type="text" style="width: 100%" name="country" value="'. $value .'" id="country" spellcheck="true" autocomplete="off" placeholder="'. __('Insira País') .'">
    </div>';
    }
///*
// |--------------------------------------------------------------------------
// | SAVE COUNTRY CUSTOM FIELD VALUE - PAIS made in 10:37 07.10.2020
// | WOOCOMMERCE - PRODUTOS - EDITAR PRODUTO 
// |--------------------------------------------------------------------------
// */
   add_action( 'woocommerce_admin_process_product_object', 'save_product_country_meta_value' );
   function save_product_country_meta_value( $product ) {
   if( isset($_POST['country']) ) {
   $product->update_meta_data( 'country', sanitize_text_field( $_POST['country'] ) );
   }
}

它有效:

现在,我在该自定义输入字段中插入的文本必须显示在产品标题和价格之间。

目标是在产品标题和价格之间以列表格式插入 5 个或更多不同的文本,并针对单个产品。

根据WooCommerce Archive Page [Visual Hook Guide] 教程,我正在尝试使用这些 Hooks 但魔术仍然没有发生:

使用钩子在functions.php文件中的商店页面上显示:

add_action( 'woocommerce_after_shop_loop_item', 'action_woocommerce_after_shop_loop_item', 20 ); // 1
add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 250, 0 ); // 2
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 15 ); // 3
add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10); // 4
function woocommerce_template_loop_rating() {
    global $product;

    $country = $product->get_meta('country');
  
    if ( $country) {
        echo '<p class="stateandcity">'. $country .'</p>';
    }
}

其中一些 Hooks 完全隐藏了价格,这不是目标。

请问我应该使用哪个钩子或过滤器来使魔术发生?

我唯一一个接近结果的 Hook 是数字 2。但如图所示,Hook 给我带来了双重结果,这个词两次。

我需要在产品标题和价格之间以列表格式呈现 5 个或更多单词。

附上结果照片 (The Word Brasil显示2次)

对任何帮助的预期感激之情

【问题讨论】:

    标签: wordpress woocommerce wordpress-theming hook-woocommerce woocommerce-rest-api


    【解决方案1】:

    WooCommerce 有一个名为 woocommerce_template_loop_rating() 的现有回调,因此通过编写自定义回调并为其命名,您将覆盖原始回调。

    您看到插入两次的值的原因是因为您要替换已被 WooCommerce 挂钩的现有回调,然后使用 add_action 再次插入它。

    您要做的第一件事是更改回调的名称。

    例子:

    function wpse_wc_template_loop_country() {
    

    然后使用正确的操作将其插入。如果您查看 woocommerce/templates/content-product.php 内部,您将看到触发的操作和默认挂钩的回调。

    由于您的目标是在标题和价格之间显示国家/地区,因此您可能需要woocommerce_after_shop_loop_item_title 挂钩。价格的优先级为 10,这意味着要让您的回调出现在价格之前,您需要使用较低的优先级。

    例子:

    add_action( 'woocommerce_after_shop_loop_item_title', 'wpse_wc_template_loop_country', 5 );
    

    【讨论】:

    • 内森,...非常感谢您的帮助。魔术仍然没有发生。我在“第二个短语上方”的第一个位置获得了国家名称,并且产品标题和价格之间的国家名称消失了。我将 Hook 优先级更改为 55 但没有任何反应,单词仍然在第一个位置。
    • 从 5 到 55:add_action( 'woocommerce_after_shop_loop_item_title', 'wpse_wc_template_loop_country', 55 );
    • 刚才我从 Mr.LoicTheAztec 找到了一个类似的问题和答案,但不幸的是我得到了相同的结果。文本插入到第一个位置。不在产品标题和价格之间。:*.com/questions/48444564/…
    • 这听起来像是一个主题问题。您必须首先查看主题正在修改哪些循环操作,以及主题是否使用任何自定义内容覆盖 content-product.php。
    • 好吧@nathan-dawson,我使用的是 Astra 版本 3.2.0。您想了解更多信息吗?
    【解决方案2】:

    价格和评级(默认)添加到

    add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
    add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
    

    因此,如果您希望额外的数据出现在标题之后,但在价格/评级之前,您需要使用具有较低优先级的相同挂钩。

    function kia_template_custom_meta() {
        global $product;
    
        $country = $product->get_meta('country');
      
        if ( $country) {
            echo '<p class="stateandcity">'. $country .'</p>';
        }
    }
    add_action( 'woocommerce_after_shop_loop_item_title', 'kia_template_custom_meta', 2 );
    

    PS-值得注意的是,这对常规商店循环有效,不会对 Block 内容产生影响。

    【讨论】:

    • 您好@helgatheviking 感谢您的大力帮助,但魔术仍未发生。我用上面的这个脚本做了很多尝试,但还没有。
    • 我创建的所有 meta_boxes 的优先级都是 50。有没有人看到这个优先级对钩子动作的影响? add_action('add_meta_boxes', 'add_product_metas_box_country', 50);
    • 有没有办法调试它以了解 Hook 假设优先执行?
    • 元框与前端显示无关。请使用默认主题尝试上述操作。如果它有效,那么你知道你的主题是冲突的。这就是我所拥有的:share.getcloudapp.com/p9u8vJ0l 标题、元数据、价格。但是请检查我上面的附言,如果您尝试使用块...这将不起作用。
    【解决方案3】:

    我没有找到一种方法让上面的代码按照我的要求工作,所以我使用的替代方法是使用三年前这个答案中的相同步骤。 感谢你们为我提供的巨大帮助。

    Add a custom field value below product title in WooCommerce archives pages

    【讨论】:

      【解决方案4】:

      对于 Astra 主题,不要使用 'woocommerce_after_shop_loop_item_title',而是使用 'astra_woo_shop_title_after',您的文字将出现在商店页面上的产品标题之后。

      【讨论】:

        最近更新 更多