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é?

Lucky Luke
fuente

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 );
}
Milo
fuente
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>';
   }
}
Pankaj jha
fuente
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