我一直在使用 Woocommerce 1.6.6,并且有一个自定义插件可以在结账时接受电子支票信息,买家在结账时将他们的银行名称、帐号、路由号码输入到表单中。从那以后,我购买了一个 2.0 的新主题,并且该插件不适用于新主题,该网站变为空白。我需要知道可以做些什么来更新插件,以便它可以与 Woocommerce 2.0 一起使用。我联系了开发人员,他们说此时更新插件不是优先事项,并希望收取超过 500 美元的费用来将插件更新到 2.0。
<?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 );
?>