Wordpress apply_filters () Argumentos Ausentes

2

Estou personalizando um site Woocommerce Wordpress.

Na classe de produto Woocommerce ( class-wc-product.php ), a função get_price aplica um filtro da seguinte forma:

function get_price() {
    return apply_filters('woocommerce_get_price', $this->price, $this);
}

No meu functions.php eu quero adicionar um filtro da seguinte forma:

add_filter('woocommerce_get_price', 'custom_price');

function custom_price($price, $product) {
    ...
}

Quando eu ligo, recebo o seguinte aviso do PHP:

Warning: Missing argument 2 for custom_price()

Por que o segundo argumento está faltando? $this não é enviado para a chamada de filtro?

    
por benedict_w 12.11.2012 / 16:07

2 respostas

13

Está faltando o segundo argumento porque você não disse ao WordPress que queria com a sua chamada add_filter . Por padrão, ações e filtros recebem apenas um argumento. Tente isto:

<?php
add_filter('woocommerce_get_price', 'custom_price', 10, 2);

function custom_price($price, $product) {
    ...
}
    
por chrisguitarguy 12.11.2012 / 16:39
1

O aviso é um resultado do segundo argumento na sua função custom_price (). O filtro fornece apenas uma variável na chamada e não me lembro se esse é o ID do produto / postagem ou o preço. Os documentos de código indicam que ele retorna uma string, então presumo que seja o preço.

Espero que você encontre a documentação em enlace

Se você precisar do produto nesse momento, precisará usar:

function custom_price( $price ) {

    global $product;

}

Se tudo mais falhar, simplesmente clique em $ price para ver se você pode dizer se é um ID de produto ou um preço. Em seguida, ajuste seu código de acordo.

    
por Steve 12.11.2012 / 16:35