WordPress插件WooCommerce,自定义支付网关设置不保存

时间:2014-02-28 02:38:22

标签: php wordpress woocommerce

我正在为WordPress插件WooCommerce开发自定义支付网关。我似乎无法保存支付网关的设置。当我在字段中输入信息然后单击“保存”时,页面将刷新,所有字段都为空白。我做错了什么?

这是我的代码。

<?php
/**
 * Plugin Name: Bitcoin WooCommerce Integration Made Easy
 * Description: A Bitcoin processing plugin that integrates into WooCommerce made specifically for Bitcoin Publish.
 * Version: 0.01
 * Author: Cammy_the_block
 */

add_action( 'plugins_loaded', 'init_your_gateway_class' );

function init_your_gateway_class() {
    class WC_Gateway_Your_Gateway extends WC_Payment_Gateway {
        function __construct() {
            $this->id = "Bitcoin WooCommerce Integration Gateway";
            $this->method_title = "Bitcoin with BWCIME";
            $this->method_description = "More later";

            $this->init_form_fields();
            $this->init_settings();

            if ( version_compare( WOOCOMMERCE_VERSION, '2.0.0', '>=' ) ) {
                    add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( &$this, 'process_admin_options' ) );
            } 
            else {
                    add_action( 'woocommerce_update_options_payment_gateways', array( &$this, 'process_admin_options' ) );
            }
        }
        function init_form_fields(){
            $this->form_fields = array(
                    'enabled' => array(
                            'title' => __( 'Enable/Disable', 'woocommerce' ),
                            'type' => 'checkbox',
                            'label' => __( 'Enable Cheque Payment', 'woocommerce' ),
                            'default' => 'yes'
                    ),
                    'title' => array(
                            'title' => __( 'Title', 'woocommerce' ),
                            'type' => 'text',
                            'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ),
                            'default' => __( 'Cheque Payment', 'woocommerce' ),
                            'desc_tip' => true,
                    ),
                    'description' => array(
                            'title' => __( 'Customer Message', 'woocommerce' ),
                            'type' => 'textarea',
                            'default' => ''
                    )
            );
        }
    }
    function process_payment( $order_id ) {
        global $woocommerce;
        $order = new WC_Order( $order_id );
        $productArray = array();
        $x = 0;
        foreach( $order->get_items() as $item_id => $item ) {
            $productArray[x] = $order->get_product_from_item( $item );
            $x++;
        }

        // Mark as on-hold (we're awaiting the cheque)
        $order->update_status('on-hold', 
        __( 'Awaiting cheque payment. there are ' + $productArray.length + 'items', 'woocommerce' )
        );


        // Remove cart
        $woocommerce->cart->empty_cart();

        // Return thankyou redirect
        return array(
            'result' => 'success',
            'redirect' => $this->get_return_url( $order )
        );
    }
}
function add_your_gateway_class ($methods ) {
    $methods[] = 'WC_Gateway_Your_Gateway'; 
    return $methods;
}

add_filter( 'woocommerce_payment_gateways', 'add_your_gateway_class' );
 ?>

修改

添加过滤器代码运行add_your_gateway_class,这反过来导致它运行WC_Gateway_Your_Gateway。

3 个答案:

答案 0 :(得分:2)

你必须在init_settings();

之后在构造函数上调用它们
    $this->init_settings();
    // Define user set variables
    $this->access_key = $this->get_option( 'access_key' );
    $this->title = $this->get_option( 'title' );
    $this->description = $this->get_option( 'description' );

编辑:

你还需要另一个动作/钩子,就在构造函数的末尾,不需要创建你想出的新函数:

            add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );

编辑2:

抱歉,你已经拥有它,我的不好:p,不知道那里发生了什么,很高兴解决了

答案 1 :(得分:1)

实际问题是您的this->id="example_gateway"id始终区分大小写,并且应该没有空格和小写。

实施例:     

function __construct() { 
    $this->id = "bitcoin_woocommerce_integration_gateway"; 
    $this->method_title =( "Bitcoin with BWCIME", 'bitcoin_woocommerce_integration_gateway' );
    $this->title = __( "Bitcoin with BWCIME", 'bitcoin_woocommerce_integration_gateway' );
    $this->method_description = "More later";

    //further as same as your code..... 

}

答案 2 :(得分:0)

我不完全确定如何修复它,但我认为它与添加函数admin_options()有关。

 public function admin_options() {
 ?>
            <h3><?php _e('Bitcoin Payment', 'woothemes'); ?></h3>
            <p><?php _e('Message!.', 'woothemes'); ?></p>
            <table class="form-table">
            <?php
                // Generate the HTML For the settings form.
                $this->generate_settings_html();
            ?>
            </table>
            <?php
} 

编辑:我不确定是什么导致它,但你必须通过与数据库连接来清除插件的设置。这样做的简单方法是更改​​插件的ID。我实际上不确定设置存储在数据库中的哪个位置。