如何使用班级应用过滤器?

时间:2019-07-08 作者:Alt C

请不要删除说这是woocommerce的问题。

下面的代码中有$fields = wp_parse_args( $fields, apply_filters( \'woocommerce_credit_card_form_fields\', $default_fields, $this->id ) );

所以我相信我可以修改$default_fields 通过add_filter

/**
     * Output field name HTML
     *
     * Gateways which support tokenization do not require names - we don\'t want the data to post to the server.
     *
     * @since  2.6.0
     * @param  string $name Field name.
     * @return string
     */
    public function field_name( $name ) {
        return $this->supports( \'tokenization\' ) ? \'\' : \' name="\' . esc_attr( $this->id . \'-\' . $name ) . \'" \';
    }

    /**
     * Outputs fields for entering credit card information.
     *
     * @since 2.6.0
     */
    public function form() {
        wp_enqueue_script( \'wc-credit-card-form\' );

        $fields = array();

        $cvc_field = \'<p class="form-row form-row-last">
            <label for="\' . esc_attr( $this->id ) . \'-card-cvc">\' . esc_html__( \'Card code\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
            <input id="\' . esc_attr( $this->id ) . \'-card-cvc" class="input-text wc-credit-card-form-card-cvc" inputmode="numeric" autocomplete="off" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" maxlength="4" placeholder="\' . esc_attr__( \'CVC\', \'woocommerce\' ) . \'" \' . $this->field_name( \'card-cvc\' ) . \' style="width:100px" />
        </p>\';

        $default_fields = array(
            \'card-number-field\' => \'<p class="form-row form-row-wide">
                <label for="\' . esc_attr( $this->id ) . \'-card-number">\' . esc_html__( \'Card number\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
                <input id="\' . esc_attr( $this->id ) . \'-card-number" class="input-text wc-credit-card-form-card-number" inputmode="numeric" autocomplete="cc-number" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" placeholder="&bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull;" \' . $this->field_name( \'card-number\' ) . \' />
            </p>\',
            \'card-expiry-field\' => \'<p class="form-row form-row-first">
                <label for="\' . esc_attr( $this->id ) . \'-card-expiry">\' . esc_html__( \'Expiry (MM/YY)\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
                <input id="\' . esc_attr( $this->id ) . \'-card-expiry" class="input-text wc-credit-card-form-card-expiry" inputmode="numeric" autocomplete="cc-exp" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" placeholder="\' . esc_attr__( \'MM / YY\', \'woocommerce\' ) . \'" \' . $this->field_name( \'card-expiry\' ) . \' />
            </p>\',
        );

        if ( ! $this->supports( \'credit_card_form_cvc_on_saved_method\' ) ) {
            $default_fields[\'card-cvc-field\'] = $cvc_field;
        }

        $fields = wp_parse_args( $fields, apply_filters( \'woocommerce_credit_card_form_fields\', $default_fields, $this->id ) );
        ?>

        <fieldset id="wc-<?php echo esc_attr( $this->id ); ?>-cc-form" class=\'wc-credit-card-form wc-payment-form\'>
            <?php do_action( \'woocommerce_credit_card_form_start\', $this->id ); ?>
            <?php
            foreach ( $fields as $field ) {
                echo $field; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
            }
            ?>
            <?php do_action( \'woocommerce_credit_card_form_end\', $this->id ); ?>
            <div class="clear"></div>
        </fieldset>
        <?php

        if ( $this->supports( \'credit_card_form_cvc_on_saved_method\' ) ) {
            echo \'<fieldset>\' . $cvc_field . \'</fieldset>\'; // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
        }
    }
}
但我做不到。这是我在扩展类中尝试的

add_filter( \'woocommerce_credit_card_form_fields\', \'ggowl_auth_creditform\', $priority = 10, $accepted_args = 1 );

public function ggowlwoo_field_name( $name ) {
        return \' name="\' . esc_attr( $this->id . \'-\' . $name ) . \'" \';
}

public function ggowl_auth_creditform($id){
    $id = $this->id;
    $default_fields = array(
                \'card-number-field\' => \'<p class="form-row form-row-wide">
                        <label for="\' . esc_attr( $this->id ) . \'-card-number">\' . esc_html__( \'Card number\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
                        <input id="\' . esc_attr( $this->id ) . \'-card-number" class="input-text wc-credit-card-form-card-number" inputmode="numeric" autocomplete="cc-number" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" placeholder="&bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull; &bull;&bull;&bull;&bull;" \' . $this->ggowlwoo_field_name( \'card-number\' ) . \' />
                </p>\',
                \'card-expiry-field\' => \'<p class="form-row form-row-first">
                        <label for="\' . esc_attr( $this->id ) . \'-card-expiry">\' . esc_html__( \'Expiry (MM/YY)\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
                        <input id="\' . esc_attr( $this->id ) . \'-card-expiry" class="input-text wc-credit-card-form-card-expiry" inputmode="numeric" autocomplete="cc-exp" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" placeholder="\' . esc_attr__( \'MM / YY\', \'woocommerce\' ) . \'" \' . $this->ggowlwoo_field_name( \'card-expiry\' ) . \' />
                </p>\',
                \'<p class="form-row form-row-last">
                <label for="\' . esc_attr( $this->id ) . \'-card-cvc">\' . esc_html__( \'Card code\', \'woocommerce\' ) . \'&nbsp;<span class="required">*</span></label>
                <input id="\' . esc_attr( $this->id ) . \'-card-cvc" class="input-text wc-credit-card-form-card-cvc" inputmode="numeric" autocomplete="off" autocorrect="no" autocapitalize="no" spellcheck="no" type="tel" maxlength="4" placeholder="\' . esc_attr__( \'CVC\', \'woocommerce\' ) . \'" \' . $this->ggowlwoo_field_name( \'card-cvc\' ) . \' style="width:100px" />
                </p>\',
        );
    return $default_fields;
}

1 个回复
最合适的回答,由SO网友:Nathan Powell 整理而成

要添加类方法的筛选器,必须在回调中使用如下数组:

add_filter( \'woocommerce_credit_card_form_fields\', array( $this, \'ggowl_auth_creditform\' ), 10, 1 );. 当然,该方法必须是公共的、静态的,或者必须实例化对象。

相关推荐

EDIT-Comments.php COMMENT_ROW_ACTIONS AJAX问题

在编辑注释上。php页面,我正在连接到comment\\u row\\u actions过滤器,以便在末尾添加另一个链接。我正在复制“Approve”链接,添加另一个查询键和值,并修改锚文本。我想根据新查询键的值添加一些注释元。批准的链接:/wp-admin/comment.php?c=9999&action=approvecomment&_wpnonce=8526c66已批准的元链接/wp-admin/comment.php?c=9999&action=approvecommen