Wordpress Woocommerce 5.1.0-在产品名称和价格之间插入文本

Wordpress Woocommerce 5.1.0-在产品名称和价格之间插入文本,wordpress,woocommerce,wordpress-theming,hook-woocommerce,woocommerce-rest-api,Wordpress,Woocommerce,Wordpress Theming,Hook Woocommerce,Woocommerce Rest Api,我使用以下代码(添加在functions.php文件中)向管理产品添加了一个带有自定义输入字段的元盒: /*************************************国家********************************************* // /* // |-------------------------------------------------------------------------- //|添加定制产品元盒-PAI于2020年10月7日1

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

/*************************************国家*********************************************
// /*
// |--------------------------------------------------------------------------
//|添加定制产品元盒-PAI于2020年10月7日10:37制造
//| WOOCOMMERCE-PRODUTO-EDITAR PRODUTO
// |--------------------------------------------------------------------------
// */
添加操作(“添加元框”、“添加产品元框”国家),50);
函数添加\产品\元\框\国家(){
添加元框(“选项国家”、“国家名称”)、“产品元框”、“国家内容回调”、“产品”、“正常”、“高”);
}
// /*
// |--------------------------------------------------------------------------
//|添加自定义产品元框HTML输入-PAI于10:37 07.10.2020制作
//| WOOCOMMERCE-PRODUTO-EDITAR PRODUTO
// |--------------------------------------------------------------------------
// */
函数产品\元框\国家\内容\回调($post){
$value=get\u post\u meta($post->ID,'country',true);
回声'
';
}
///*
// |--------------------------------------------------------------------------
//|保存国家/地区自定义字段值-PAI于2020年10月7日10:37制作
//| WOOCOMMERCE-PRODUTO-EDITAR PRODUTO
// |--------------------------------------------------------------------------
// */
添加操作('woocmerce\u admin\u process\u product\u object'、'save\u product\u country\u meta\u value');
功能保存\产品\国家\元\值($product){
如果(isset($_POST['country'])){
$product->update_meta_数据('country',清理文本_字段($_POST['country']);
}
}
它的工作原理是:

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

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

因此,在教程中,我尝试使用这些挂钩,但神奇的事情仍然没有发生:

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

// ****************************** 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'] ) );
   }
}
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>';
    }
}
add_action('woocommerce_在_shop_loop_item'之后,'action_woocommerce_在_shop_loop_item'之后,20);//1.
添加动作('woocommerce'在'shop'循环'item'标题之后,'woocommerce'模板'u循环'rating',250,0);//2.
添加动作('woocommerce'在'woocommerce'之后,在'shop'循环'item'之后,'woocommerce'模板'woocommerce'循环'product'链接'close',15);//3.
添加操作('woocommerce'在购物车后添加,'woocommerce'循环项目','woocommerce'模板\u循环\u添加到购物车',10);//4.
函数\u模板\u循环\u评级(){
全球$产品;
$country=$product->get_meta('country');
如果($国家){
echo“

”.$country.

”; } }
有些钩子完全隐藏了价格,这不是目标

请问我应该用哪种钩子或过滤器来实现魔法

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

我需要在产品名称和价格之间列出5个或更多的单词

附上带有结果的照片(Brasil一词显示了两次):


对任何帮助的期待感谢

WooCommerce有一个名为
WooCommerce\u template\u loop\u rating()
的现有回调,因此,通过编写自定义回调并将其命名为相同的名称,您将覆盖原始回调

您之所以看到两次插入的值,是因为您正在替换已经被WooCommerce钩住的现有回调,然后使用
add\u action
再次插入它

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

例如:

function wpse_wc_template_loop_country() {
add_action( 'woocommerce_after_shop_loop_item_title', 'wpse_wc_template_loop_country', 5 );
然后使用正确的操作插入它。如果查看woocommerce/templates/content-product.php内部,您将看到触发的操作以及默认情况下挂接的回调

由于您的目标是在标题和价格之间显示国家,因此您可能需要
woocommerce\u-after\u-shop\u-loop\u-item\u标题
hook。Price的优先级为10,这意味着要使回调显示在Price之前,您需要使用较低的优先级

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 );
例如:

function wpse_wc_template_loop_country() {
add_action( 'woocommerce_after_shop_loop_item_title', 'wpse_wc_template_loop_country', 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 );
函数kia\u模板\u自定义\u元(){
全球$产品;
$country=$product->get_meta('country');
如果($国家){
echo“

”.$country.

”; } } 添加动作('woocommerce'在'shop'循环'item'标题之后,'kia'模板'custom'meta',2);

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

我没有找到让上面的代码在aspekted中工作的方法,所以我使用的替代方法是使用三年前的答案中的相同步骤。 感谢大家对我的巨大帮助。


Nathan,…非常感谢您的帮助。魔法仍然没有发生。我在第一个位置“第二个短语上方”得到了国家名称,产品名称和价格之间的国家名称消失了。我把钩子的优先级改为55,但什么也没发生,单词仍然保持在第一个位置。从5到55:添加动作('woocommerce'在'u shop'循环'u item'标题之后,'wpse'wc'模板'u循环'u country',55);刚才我从LoicTheAztec先生那里找到了一个类似的问题和答案,但不幸的是,我得到了同样的结果。文本将插入到第一个位置。不是在产品名称和价格之间:那听起来像是一个主题问题。你必须要我