web-dev-qa-db-fra.com

créer un filtre dans functions.php

Je veux créer un filtre dans mon thème functions.php pour changer l'URL de $ icon_html dans cette fonction du plugin.

public function get_icon() {
// Paypal icon
$icon_html = '<img src="Paypal.png" />';

return apply_filters( 'woocommerce_gateway_icon', $icon_html, $this->get_id() );
}

Comment effectuer cela? $ icon_html n'est pas unique.

Merci Thibault

1
t-bo

Chaque fois que vous voyez apply_filters( 'filter_name', $value ), vous pouvez utiliser add_filter() pour remplacer ou modifier la valeur de $value:

add_filter( 'filter_name', 'callback_function' );

callback_function est une fonction que vous créez. Cette fonction acceptera $value en tant qu'argument et devra renvoyer une nouvelle valeur. Donc, pour votre exemple, cela ressemblera à ceci:

function wpse_275788_replace_icon( $icon_html, $id ) {
    $icon_html = 'Put new icon html here.';

    return $icon_html;
}
add_filter( 'woocommerce_gateway_icon', 'wpse_275788_replace_icon', 10, 2 );
0
Jacob Peattie

Je veux mettre à jour l'icône Paypal:

enter image description here

Voici comment ils mettent les icônes de carte de crédit:

/**
     * Returns the gateway icon markup
     *
     * @since 1.0.0
     * @see WC_Payment_Gateway::get_icon()
     * @return string icon markup
     */
    public function get_icon() {

        $icon = '';

        // specific icon
        if ( $this->icon ) {

            // use icon provided by filter
            $icon = sprintf( '<img src="%s" alt="%s" class="sv-wc-payment-gateway-icon wc-%s-payment-gateway-icon" />', esc_url( \WC_HTTPS::force_https_url( $this->icon ) ), esc_attr( $this->get_title() ), esc_attr( $this->get_id_dasherized() ) );
        }

        // credit card images
        if ( ! $icon && $this->supports_card_types() && $this->get_card_types() ) {

            // display icons for the selected card types
            foreach ( $this->get_card_types() as $card_type ) {

                $card_type = SV_WC_Payment_Gateway_Helper::normalize_card_type( $card_type );

                if ( $url = $this->get_payment_method_image_url( $card_type ) ) {
                    $icon .= sprintf( '<img src="%s" alt="%s" class="sv-wc-payment-gateway-icon wc-%s-payment-gateway-icon" width="40" height="25" style="width: 40px; height: 25px;" />', esc_url( $url ), esc_attr( $card_type ), esc_attr( $this->get_id_dasherized() ) );
                }
            }
        }

        // echeck image
        if ( ! $icon && $this->is_echeck_gateway() ) {

            if ( $url = $this->get_payment_method_image_url( 'echeck' ) ) {
                $icon .= sprintf( '<img src="%s" alt="%s" class="sv-wc-payment-gateway-icon wc-%s-payment-gateway-icon" width="40" height="25" style="width: 40px; height: 25px;" />', esc_url( $url ), esc_attr( 'echeck' ), esc_attr( $this->get_id_dasherized() ) );
            }
        }

        /* This filter is documented in WC core */
        return apply_filters( 'woocommerce_gateway_icon', $icon, $this->get_id() );
    }

et voici comment ils ont mis l'icône Paypal:

public function get_icon() {

        // from https://www.Paypal.com/webapps/mpp/logos-buttons
        $icon_html = '<img src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/PP_logo_h_100x26.png" alt="Paypal" />';

        return apply_filters( 'woocommerce_gateway_icon', $icon_html, $this->get_id() );
    }

J'espère que c'est plus clair. Merci

0
t-bo