WooCommerce: Cómo editar el get_price_html


13

Estoy tratando de editar el valor del precio de un solo producto.

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

Por el momento, incluso si elimino todo el contenido de la función ubicada en class-wc-productél, ¿se muestra milagrosamente? Alguien sabe por qué?

Respuestas:


17

Los archivos principales y de complementos nunca deben editarse directamente, ya que cualquier actualización podría sobrescribir sus cambios. Si observa el get_price_htmlmétodo en la fuente de WooCommerce , hay varios filtros disponibles para modificar la salida de la función.

Consulte el add_filterCodex para obtener más información sobre cómo agregar filtros a las apply_filtersllamadas.

De get_price_htmlen class-wc-product:

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

Entonces, para agregar su propio filtro:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Was:' . str_replace( '<ins>', ' Now:<ins>', $price );
}

Gracias por la respuesta, por cierto, cuando elimino el contenido de la función principal, aún devuelve la salida como normal
— Lucky Luke

1
Entonces, digamos que si hubo una venta y me devuelve <del>£2</del><ins>£1</ins>, ¿cómo puedo cambiar eso Was:<del>£2</del> Now:<ins>£1</ins>con un filtro?
— Lucky Luke

No estoy seguro, no estoy demasiado familiarizado con WooCommerce, tal vez otra clase lo extienda. vea la edición anterior para su segunda pregunta.
— Milo

Brill,;), gran ayuda
— Lucky Luke

Estoy tratando de saber qué sucede en el woocommerce_get_price_htmlfiltro predeterminado $price. En mi sitio, woocommerce muestra 0 $ para productos gratuitos en su lugarFree!
— SKMohammadi

5
function wpa83368_price_html( $price,$product ){
   // return $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 ) .' Retail </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Our Price</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Our Price</div>';
      }
   } else {
     return '<div class="live-colst">0 Our Price</div>';
   }
}

55
Incluso si su código puede funcionar (y no tengo ninguna razón para pensar que no lo haga), este es un sitio de preguntas y respuestas, no un repositorio de código, por lo que es mejor compartir experiencia y conocimiento explicando su código, en lugar de simplemente escribir código sin explicación ni comentarios en línea ...
— gmazzap

el código también usa propiedades de objeto que no es bueno.
— Svetoslav Marinov
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.