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.