WooCommerce: Cómo editar el get_price_html

27 ene 2013, 21:15:35
Vistas: 118K
Votos: 19

Estoy tratando de editar el valor del precio para un producto individual.

En single-product/price.php hay una llamada a la plantilla $product->get_price_html. ¿Cómo puedo editar esa función/método para cambiar la forma en que se presenta el HTML?

En este momento, incluso si elimino todo el contenido de la función ubicada en class-wc-product, ¡aún se muestra milagrosamente! ¿Alguien sabe por qué?

0
Todas las respuestas a la pregunta 3
6
26

Los archivos del núcleo y de los plugins nunca deben editarse directamente, ya que cualquier actualización podría sobrescribir tus cambios. Si revisas el código fuente de WooCommerce en el método get_price_html, hay varios filtros disponibles para modificar la salida de la función.

Consulta add_filter en el Codex para obtener más información sobre cómo añadir filtros a las llamadas de apply_filters.

Desde get_price_html en class-wc-product:

return apply_filters('woocommerce_get_price_html', $price, $this);

Así que para añadir tu propio filtro:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Precio anterior:' . str_replace( '<ins>', ' Precio actual:<ins>', $price );
}
27 ene 2013 22:06:09
Comentarios

Gracias por la respuesta, por cierto ¿por qué cuando elimino el contenido de la función principal todavía devuelve la salida como normal?

Lucky Luke Lucky Luke
27 ene 2013 22:09:15

Digamos que si hubiera una oferta y me devuelve <del>£2</del><ins>£1</ins>, ¿cómo puedo cambiarlo a Antes:<del>£2</del> Ahora:<ins>£1</ins> con un filtro?

Lucky Luke Lucky Luke
27 ene 2013 22:19:58

No estoy seguro, no estoy muy familiarizado con WooCommerce, quizás otra clase lo extienda. Mira la edición anterior para tu segunda pregunta.

Milo Milo
27 ene 2013 22:27:09

Brillante, ;), gran ayuda

Lucky Luke Lucky Luke
27 ene 2013 22:33:46

Estoy tratando de saber qué está pasando en el filtro por defecto woocommerce_get_price_html para $price. En mi sitio, WooCommerce muestra $0 para productos gratis en lugar de ¡Gratis!

SKMohammadi SKMohammadi
7 dic 2016 11:42:22

¿Qué archivo tiene esa función? No puedo encontrar el archivo. Gracias

Si8 Si8
19 jun 2020 05:03:05
Mostrar los 1 comentarios restantes
2
function wpa83368_price_html( $price,$product ){
   // devuelve $product->price;
    if ( $product->price > 0 ) {
      if ( $product->price && isset( $product->regular_price ) ) {
        $from = $product->regular_price;
        $to = $product->price;
        return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Precio Regular </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Nuestro Precio</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Nuestro Precio</div>';
      }
   } else {
     return '<div class="live-colst">0 Nuestro Precio</div>';
   }
}
3 ene 2014 16:13:45
Comentarios

Aunque tu código pueda funcionar (y no tengo motivos para pensar que no), esto es un sitio de preguntas y respuestas, no un repositorio de código. Por lo tanto, es mejor compartir experiencia y conocimiento explicando tu código, en lugar de simplemente escribir código sin explicaciones ni comentarios internos...

gmazzap gmazzap
3 ene 2014 16:38:31

el código también utiliza propiedades de objeto, lo cual no es bueno.

Svetoslav Marinov Svetoslav Marinov
8 may 2018 21:50:06
0

en el archivo functions.php

function h08831n_get_price($product){
        $price_html = '<div class="product-price">';
        if ( $product->get_price() > 0 ) {
            if ($product->get_price() && $product->get_regular_price()) {
                $from = $product->get_regular_price();
                $to = $product->get_price();
                $price_html .= '<del>'. ( ( is_numeric( $from ) ) ? wc_price( $from ) : $from ) .'</del><ins>'.( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) .'</ins>';
            }else{
                $to = $product->get_price();
                $price_html .= '<ins>' . ( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) . '</ins>';
            }
        }else{
            $price_html .= '<div class="free">gratis</div>';
        }
        $price_html .= '</div>';
        return $price_html;
    }

en el archivo donde quieras mostrar el precio como single-product.php

global $product;
echo h08831n_get_price($product);

también puedes eliminar wc_price de la función para remover los formatos HTML por defecto de WooCommerce

20 dic 2020 19:31:52