wordpress - Woocommerce 5.1.0 - Insertar texto ENTRE el título del producto y el precio

CorePress2024-01-16  10

Agregué un Metabox con un campo de entrada personalizado para administrar productos usando el siguiente código (agregado en el archivo funciones.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'] ) ); } }

Y funciona:

Ahora el texto que inserto en ese campo de entrada personalizado debe mostrarse ENTRE el Título del producto y el Precio.

El objetivo es insertar 5 o más textos diferentes ENTRE el título del producto y el precio, en formato de lista, Y para productos individuales.

De acuerdo con el tutorial de la página de archivo de WooCommerce [Guía de ganchos visuales], estoy intentando usar esos ganchos, pero la magia aún no sucedió:

Gancho usado para mostrar en la página de la tienda en el archivo funciones.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>';
    }
}

algunos de esos Ganchos ocultan completamente el Precio y ese no es el objetivo.

¿Qué gancho o filtro debo usar para que la Magia suceda?¿Por favor?

El único Hook con el que tengo un resultado cercano es con el número 2. Pero como muestra la imagen, el Hook me trae un resultado doble, la palabra dos veces.

Necesito presentar 5 o más palabras en formato de lista entre el título del producto y el precio.

Adjunto foto con el resultado (The Word Brasil mostrado 2 veces):

Agradecimiento anticipado por cualquier ayuda



------------------------------------

WooCommerce tiene una devolución de llamada existente llamada woocommerce_template_loop_rating(), por lo que al escribir una devolución de llamada personalizada y darle el mismo nombre, estás anulando la original.

La razón por la que ves el valor insertado dos vecesEsto se debe a que estás reemplazando la devolución de llamada existente que ya está conectada por WooCommerce y luego estás usando add_action para insertarla nuevamente.

Lo primero que querrás hacer es cambiar el nombre de tu devolución de llamada.

Ejemplo:

function wpse_wc_template_loop_country() {

Luego insértalo usando la acción correcta. Si miras dentro de woocommerce/templates/content-product.php, verás las acciones que se activan y las devoluciones de llamada que están conectadas de forma predeterminada.

Dado que tu objetivo es mostrar el país entre el título y el precio, probablemente quieras el gancho woocommerce_after_shop_loop_item_title. El precio tiene una prioridad de 10, lo que significa que para que su devolución de llamada aparezca antes que el precio, debe utilizar una prioridad más baja.

Ejemplo:

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

9

Nathan,...Muchas gracias por la ayuda. La Magia aún no ha ocurrido. Obtuve el nombre del país en la primera posición "arriba de la segunda frase" y el nombre del país entre el título del producto y el precio desapareció. Cambié la prioridad del Hook a 55 pero no pasa nada, la palabra permanece en la primera posición.

-Paulo do Porto

19/03/2021 a las 17:42

De 5 a 55: add_action( 'woocommerce_after_shop_loop_item_title', 'wpse_wc_template_loop_country', 55 );

-Paulo do Porto

19/03/2021 a las 17:42

Justo ahora encontré una pregunta y respuesta similar del Sr.LoicTheAztec, pero desafortunadamente obtuve el mismo resultado. El Texto se inserta en la primera posición. No entre el título del producto y el precio: stackoverflow.com/questions/48444564/&helldirección IP;

-Paulo do Porto

19/03/2021 a las 17:49

Entonces suena como una cuestión temática. Primero tendrías que observar qué acciones de bucle está modificando el tema y también si el tema está anulando content-product.php con algo personalizado.

- Nathan Dawson

19/03/2021 a las 17:50

Bueno @nathan-dawson, uso Astra versión 3.2.0. ¿Quieres piel?¿Hay más información al respecto?

-Paulo do Porto

19/03/2021 a las 18:10



------------------------------------

El precio y la calificación se agregan (por defecto) a

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 );

Por lo tanto, si desea que aparezcan datos adicionales después del título, pero antes del precio/calificación, necesitará usar ese mismo gancho con una prioridad más baja.

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 );

PD: Vale la pena señalar que esto solo es válido para el ciclo de compra normal y no tendrá ningún impacto en el contenido del bloque.

4

Hola @helgatheviking. Gracias por la gran ayuda, pero la magia aún no se ha realizado. Hice muchos intentos con este script anterior, pero todavía no.

-Paulo do Porto

19/03/2021 a las 18:08

Todos los meta_boxes que creé tienen la prioridad 50. ¿Alguien ve una influencia de esta prioridad en la acción de los ganchos? add_action( 'add_meta_boxes', 'add_product_metas_box_country', 50 );

-Paulo do Porto

19/03/2021 a las 18:30

¿Hay alguna forma de depurar esto para saber qué Hook asume la ejecución prioritaria?

-Paulo do Porto

19/03/2021 a las 18:36

Las metaboxes no tienen relación con la pantalla frontal. Pruebe lo anterior con un tema predeterminado. Si funciona, entonces sabrás que tu tema está en conflicto. Esto es lo que tengo: share.getcloudapp.com/p9u8vJ0l Título, meta, precio. Pero consulte mi posdata anterior, si está intentando utilizar bloques.. esto no funcionará.

- helgatheviking

20/03/2021 a las 20:04



------------------------------------

No encontré una manera de hacer que el código anterior funcione como esperaba, por lo que la alternativa que utilicé fue seguir los mismos pasos de esta respuesta de hace tres años. Gracias a todos por la enorme ayuda que me ofrecieron.

Agregue un valor de campo personalizado debajo del título del producto en las páginas de archivos de WooCommerce



------------------------------------

Para el tema Astra, en lugar de usar 'woocommerce_after_shop_loop_item_title', use este 'astra_woo_shop_title_after' y su texto aparecerá después del título del producto en la página de la tienda.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare