3

私は Woocommerce 1.6.6 を使用しており、購入者が銀行名、口座番号、ルーティング番号をチェックアウト時にフォームに入力するチェックアウト時に電子小切手情報を受け入れるカスタム プラグインがありました。それ以来、2.0 の新しいテーマを購入しましたが、プラグインが新しいテーマで動作せず、サイトが空白になります。Woocommerce 2.0 で動作するようにプラグインを更新するにはどうすればよいかを知る必要があります。開発者に連絡したところ、現時点でプラグインを更新することは優先事項ではなく、プラグインを 2.0 に更新するために 500 ドル以上請求したいとのことでした。

    <?php
/*
Plugin Name: WooCommerce - e-Cheque Payments
Plugin URI: http://www.visser.com.au/woocommerce/plugins/echeque-payments/
Description: Allows WooCommerce store owners to accept electronic cheques for manual deposit into the store owner's bank account.
Version: 1.0.2
Author: Visser Labs
Author URI: http://www.visser.com.au/about/
License: GPL2
*/

load_plugin_textdomain( 'woo_cp', null, dirname( plugin_basename( __FILE__ ) ) . '/languages' );

include_once( 'includes/common.php' );

function woo_cp_init() {

    global $woo_cp;

    $woo_cp = array(
        'filename' => basename( __FILE__ ),
        'dirname' => basename( dirname( __FILE__ ) ),
        'abspath' => dirname( __FILE__ ),
        'relpath' => basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ )
    );

    $woo_cp['prefix'] = 'woo_cp';
    $woo_cp['name'] = __( 'e-Cheque Payments for WooCommerce', 'woo_cp' );
    $woo_cp['menu'] = __( 'e-Cheque Payments', 'woo_cp' );

}
add_action( 'init', 'woo_cp_init' );

function woo_cp_admin_init() {

    wp_enqueue_style( 'woo_cp_styles', plugins_url( '/templates/admin/woocommerce-cp_admin_sales.css', __FILE__ ) );

}
add_action( 'admin_init', 'woo_cp_admin_init' );

if( is_admin() ) {

    /* Start of: WordPress Administration */

    include_once( 'includes/install.php' );
    register_activation_hook( __FILE__, 'woo_cp_install' );

    function woo_cp_add_settings_link( $links, $file ) {

        static $this_plugin;
        if( !$this_plugin ) $this_plugin = plugin_basename( __FILE__ );
        if( $file == $this_plugin ) {
            $settings_link = '<a href="admin.php?page=woocommerce">' . __( 'Settings', 'woo_cp' ) . '</a>';
            array_unshift( $links, $settings_link );
        }
        return $links;

    }
    add_filter( 'plugin_action_links', 'woo_cp_add_settings_link', 10, 2 );

    function add_echeque_meta_box() {

        $post_type = 'shop_order';
        add_meta_box( 'woocommerce-product-echeque', __( 'e-Cheque Payment', 'woo_cp' ), 'woo_cp_meta_box', $post_type, 'normal', 'default' );

    }
    add_action( 'add_meta_boxes', 'add_echeque_meta_box' );

    function woo_cp_meta_box() {

        global $woo_cp, $post, $wpdb;

        wp_nonce_field( 'woocommerce_save_data', 'woocommerce_meta_nonce' );
        $cheque_id = get_posts( array(
            'post_type' => 'cheque_payment',
            'post_parent' => $post->ID,
            'limit' => 1
        ) );
        if( $cheque_id ) {
            $cheque = new stdClass();
            $cheque->ID = $cheque_id[0]->ID;
            $cheque->account_holder = get_post_meta( $cheque->ID, '_account_holder', true );
            if( !$cheque->account_holder )
                $cheque->account_holder = '-';
            $cheque->bank_name = get_post_meta( $cheque->ID, '_bank_name', true );
            if( !$cheque->bank_name )
                $cheque->bank_name = '-';
            $cheque->routing_number = get_post_meta( $cheque->ID, '_routing_number', true );
            if( !$cheque->routing_number )
                $cheque->routing_number = '-';
            $cheque->account_number = get_post_meta( $cheque->ID, '_account_number', true );
            if( !$cheque->account_number )
                $cheque->account_number = '-';
            $cheque->check_number = get_post_meta( $cheque->ID, '_check_number', true );
            if( !$cheque->check_number )
                $cheque->check_number = '-';

        }

        require( $woo_cp['abspath'] . '/templates/admin/woocommerce-cp_admin_sales.php' );

    }

    /* End of: WordPress Administration */

}

function init_echeque_gateway() {

    if( class_exists( 'WC_Payment_Gateway' ) ) {

        class woocommerce_echeque extends WC_Payment_Gateway {

            function __construct() {

                $this->id = 'echeque';
                $this->method_title = __( 'Electronic Cheque', 'woo_cp' );
                $this->has_fields = true;

                // Load the form fields.
                $this->init_form_fields();

                // Load the settings.
                $this->init_settings();

                // Define user set variables
                $this->title = $this->settings['title'];
                $this->description = $this->settings['description'];
                $this->instructions = $this->settings['instructions'];

                /* display configuration options for this plugin */
                add_action( 'woocommerce_update_options_payment_gateways', array( &$this, 'process_admin_options' ) );
                add_action( 'woocommerce_thankyou_cod', array( &$this, 'thankyou' ) );

            }

            function admin_options() {

?>
    <h3><?php _e( 'e-Cheque','woo_cp'); ?></h3>
    <p><?php _e( 'Allows WooCommerce store owners to accept e-Cheques for manual deposit into the store owner\'s bank account.', 'woo_cp' ); ?></p>
    <table class="form-table">
<?php
                $this->generate_settings_html();
?>
    </table>
<?php
            }

            function init_form_fields() {

                $this->form_fields = array(
                    'enabled' => array(
                        'title' => __( 'Enable e-Cheques', 'woo_cp' ),
                        'label' => __( 'Enable e-Cheques', 'woo_cp' ),
                        'type' => 'checkbox',
                        'description' => '',
                        'default' => 'no'
                    ),
                    'title' => array(
                        'title' => __( 'Title', 'woo_cp' ), 
                        'type' => 'text', 
                        'description' => __( 'Payment method title that the customer will see on your website.', 'woo_cp' ), 
                        'default' => __( 'Cheque', 'woo_cp' )
                    ), 
                    'description' => array(
                        'title' => __( 'Description', 'woo_cp' ), 
                        'type' => 'textarea', 
                        'description' => __( 'Let the customer know that their order won\'t be shipping until you receive payment.', 'woo_cp' ), 
                        'default' => __( 'To pay via electronic cheque please fill the required details below. Your order wont be shipped until the funds have cleared in our account.', 'woo_cp' )
                    ), 
                    'instructions' => array(
                        'title' => __( 'Instructions', 'woo_cp' ), 
                        'type' => 'textarea', 
                        'description' => __( 'Instructions that will be added to the thank you page.', 'woo_cp' ), 
                        'default' => __( '', 'woo_cp' )
                    )
                );

            }

            /**
            * Payment fields for Cheque Payment Deluxe
            **/
            public function payment_fields() {

                global $woo_cp;

                $payment_settings = maybe_unserialize( get_option( 'woocommerce_echeque_settings' ) );

                if( $this->description ) echo wpautop( wptexturize( $this->description ) );
                require( $woo_cp['abspath'] . '/templates/store/woocommerce-cp_store_checkout.php' );

            }

            /**
             * Process the payment and return the result
             **/
            public function process_payment( $order_id ) {

                global $woo_cp, $woocommerce;

                $order = new WC_Order( $order_id );

                /* Mark as on-hold (we're awaiting approval) */
                $order->update_status( 'on-hold', __( 'Waiting to be processed', 'woocommerce' ) );

                $account_holder = $this->get_post( $woo_cp['prefix'] . '_account_holder' );
                $bank_name = $this->get_post( $woo_cp['prefix'] . '_bank_name' );
                $routing_number = $this->get_post( $woo_cp['prefix'] . '_routing_number' );
                $account_number = $this->get_post( $woo_cp['prefix'] . '_account_number' );
                $check_number = $this->get_post( $woo_cp['prefix'] . '_check_number' );

                $post_type = 'cheque_payment';
                $post_data = array(
                    'post_status' => 'publish',
                    'post_type' => $post_type,
                    'post_parent' => $order_id,
                    'post_author' => 1,
                    'post_name' => '',
                    'post_title' => __( 'e-Cheque for Order #' ) . $order_id,
                    'post_content' => '',
                    'comment_status' => 'closed'
                );
                $post_ID = wp_insert_post( $post_data );
                if( $post_ID ) {
                    update_post_meta( $post_ID, '_account_holder', $account_holder );
                    update_post_meta( $post_ID, '_bank_name', $bank_name );
                    update_post_meta( $post_ID, '_routing_number', $routing_number );
                    update_post_meta( $post_ID, '_account_number', $account_number );
                    update_post_meta( $post_ID, '_check_number', $check_number );
                }
                if( WP_DEBUG ) {
                    $order->add_order_note( __( 'Account Holder: ', 'woo_cp' ) . $account_holder );
                    $order->add_order_note( __( 'Bank Name: ', 'woo_cp' ) . $bank_name );
                    $order->add_order_note( __( 'Routing Number: ', 'woo_cp' ) . $routing_number );
                    $order->add_order_note( __( 'Account Number: ', 'woo_cp' ) . $account_number );
                    $order->add_order_note( __( 'Check Number: ', 'woo_cp' ) . $check_number );
                }

                /* Empty awaiting payment session */
                unset( $_SESSION['order_awaiting_payment'] );

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

                /* Return thankyou redirect */
                $checkout_redirect = apply_filters( 'woocommerce_get_checkout_redirect_page_id', woocommerce_get_page_id( 'thanks' ) );
                return array(
                    'result' => 'success',
                    'redirect' => add_query_arg( 'key', $order->order_key, add_query_arg( 'order', $order_id, get_permalink( $checkout_redirect ) ) )
                );

            }

            /**
             * Validate Frontend Fields
            **/
            function validate_fields() {

                global $woo_cp, $woocommerce;

                $error = array();

                $account_holder = $this->get_post( $woo_cp['prefix'] . '_account_holder' );
                if( !$account_holder )
                    $error[] = '<strong>' . __( 'Account Holder', 'woo_cp' ) . '</strong> ' . __( 'is a required field.', 'woocommerce' );
                $bank_name = $this->get_post( $woo_cp['prefix'] . '_bank_name' );
                if( !$bank_name )
                    $error[] = '<strong>' . __( 'Bank Name', 'woo_cp' ) . '</strong>' . __( 'is a required field.', 'woocommerce' );
                $routing_number = $this->get_post( $woo_cp['prefix'] . '_routing_number' );
                if( !$routing_number )
                    $error[] = '<strong>' . __( 'Routing Number', 'woo_cp' ) . '</strong> ' . __( 'is a required field.', 'woocommerce' );
                $account_number = $this->get_post( $woo_cp['prefix'] . '_account_number' );
                if( !$account_number )
                    $error[] = '<strong>' . __( 'Account Number', 'woo_cp' ) . '</strong> ' . __( 'is a required field.', 'woocommerce' );
                $check_number = $this->get_post( $woo_cp['prefix'] . '_check_number' );
                if( !$check_number )
                    $error[] = '<strong>' . __( 'Check Number', 'woo_cp' ) . '</strong> ' . __( 'is a required field.', 'woocommerce' );

                if( $error ) {
                    $size = count( $error );
                    for( $i = 0; $i < $size; $i++ )
                        $woocommerce->add_error( $error[$i] );
                } else {
                    return true;
                }

            }

            function thankyou() {

                if( $this->instructions != '' )
                    echo wpautop( $this->instructions );

            }

            private function get_post( $name ) {

                if( isset( $_POST[$name] ) )
                    return $_POST[$name];
                else
                    return NULL;

            }

            private function get_option( $name ) {

                return get_option( $this->option_prefix . $name );

            }

        }

        /**
         * Add the gateway to WooCommerce
         **/
        function woocommerce_echeque_add_gateway( $methods ) {

            $methods[] = 'woocommerce_echeque';
            return $methods;

        }
        add_filter( 'woocommerce_payment_gateways', 'woocommerce_echeque_add_gateway', 1 );

    }

}
add_action( 'plugins_loaded', 'init_echeque_gateway', 0 );
?>
4

0 に答える 0