WooCommerce: Como editar o get_price_html

13

Estou tentando editar o valor do preço de um único produto.

Em single-product/price.phphá uma chamada de modelo para $product->get_price_html. Como posso editar essa função / método para alterar a maneira como o HTML é apresentado?

No momento, mesmo se eu excluir todo o conteúdo da função localizada class-wc-productnela ainda milagrosamente exibe? Alguém sabe o porquê?

Lucky Luke
fonte

Respostas:

17

Os arquivos principais e de plug-in nunca devem ser editados diretamente, pois quaisquer atualizações podem substituir suas alterações. Se você procurar na fonte WooCommerce o get_price_htmlmétodo, existem vários filtros disponíveis para modificar a saída da função.

Veja add_filterno Codex para obter mais informações sobre como adicionar filtros às apply_filterschamadas.

A partir get_price_htmlde class-wc-product:

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

Então, para adicionar seu próprio 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
fonte
Obrigado pela resposta, a propósito, por que, quando eu excluo o conteúdo da função principal, ele ainda retorna a saída como normal #
Lucky Luke
1
Então, digamos que, se houve uma venda e ela me devolve <del>£2</del><ins>£1</ins>, como posso mudar isso para Was:<del>£2</del> Now:<ins>£1</ins>um filtro?
Luke sortudo
não tenho certeza, não estou muito familiarizado com o WooCommerce, talvez outra classe o estenda. veja a edição acima para sua segunda pergunta.
Milo
Brill;;), grande ajuda
Lucky Luke
Estou tentando saber o que está acontecendo no woocommerce_get_price_htmlfiltro padrão $price. No meu site, o woocommerce mostra 0 $ em produtos gratuitosFree!
SKMohammadi 7/16/16
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
fonte
5
Mesmo que seu código possa funcionar (e não tenho motivos para pensar que não funcione), este é um site de perguntas e respostas, não um repositório de códigos, por isso é melhor compartilhar experiências e conhecimentos que explicam seu código, em vez de apenas escrever códigos sem explicações nem comentários na linha ...
gmazzap
o código também usa propriedades de objetos que não são boas.
Svetoslav Marinov