在函数.php中创建筛选器

时间:2017-08-04 作者:t-bo

我想在我的函数中创建一个过滤器。php主题更改此插件函数中$icon\\u html的URL。

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

return apply_filters( \'woocommerce_gateway_icon\', $icon_html, $this->get_id() );
}
如何执行此操作$icon\\u html不是唯一的。

谢谢你,Thibault

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

每当你看到apply_filters( \'filter_name\', $value ), 您可以使用add_filter() 替换或修改$value:

add_filter( \'filter_name\', \'callback_function\' );
在哪里callback_function 是您创建的函数。该函数将接受$value 作为参数,并且需要返回新值。因此,对于您的示例,它将如下所示:

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 );

SO网友:t-bo

我想更新paypal图标:

enter image description here

下面是他们如何放置信用卡图标:

/**
     * 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() );
    }
下面是他们如何放置贝宝图标:

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() );
    }
希望这更清楚。谢谢

结束

相关推荐

Apply_Filters(‘the_content’,$Content)与DO_ShortCode($Content)

假设我有一个主题选项或自定义的postmeta文本区域。现在我想执行多个短代码、一般文本、图像等。最佳实践是什么?为什么?选项1:$content = //my text area data; echo apply_filters(\'the_content\', $content); 选项2:$content = //my text area data; echo do_shortcode($content); 请告诉我哪一个是最佳实践,以及为什么。EDIT让我详细描