我对OOP很新,但我认为我已经掌握了基础知识,而我正在努力学习。所以我决定将我的简单wordpress插件从程序代码转换为类方法,但我不断遇到致命的错误。
这是我的程序代码:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
//Check if WooCommerce is active
if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
//Load plugin styles
function woa_wqfsp_stylesheet()
{
wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
}
add_action('wp_enqueue_scripts', 'woa_wqfsp_stylesheet');
//add quantity fields
add_filter( 'woocommerce_loop_add_to_cart_link', 'woa_add_quantity_fields', 10, 2 );
function woa_add_quantity_fields( $html, $product ) {
if ( $product && $product->is_type( 'simple' ) && $product->is_purchasable() && $product->is_in_stock() && ! $product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}
}//main end
?>
这是我的OOP代码,但我一直收到错误:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
function woa_wqfsp() {
return woa_wqfsp();
} // End woa_wqfsp()
woa_wqfsp();
class woa_wqfsp {
private static $_instance = null;
private $html;
private $product;
public function __construct() {
add_action( 'init', array( $this, 'setup' ) );
}
public static function instance() {
if ( is_null( self::$_instance ) )
self::$_instance = new self();
return self::$_instance;
}
//Load plugin styles
function woa_wqfsp_stylesheet()
{
wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
}
function woa_add_quantity_fields( $html, $product ) {
if ( $this->$product && $this->$product->is_type( 'simple' ) && $this->$product->is_purchasable() && $this->$product->is_in_stock() && ! $this->$product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $this->$product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $this->$product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $this->$product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}
function woa_wqfsp_run() {
//Check if WooCommerce is active
if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
//add style for quantity field
add_action('wp_enqueue_scripts', $this->woa_wqfsp_stylesheet);
//add quantity fields
add_filter( 'woocommerce_loop_add_to_cart_link', $this->woa_add_quantity_fields, 10, 2 );
}
}
}//class end
?>
有人可以指出我做错了什么吗?我认为这是围绕这一部分:函数woa_add_quantity_fields($ html,$ product)
$ html只是一个null var,而产品是woocommerce的全局变种
提前谢谢
答案 0 :(得分:1)
<强>首先强>
关注一些naming conventions,使用大写字母开始类名。
<强>其次:强> 部分
function woa_wqfsp() {
return woa_wqfsp();
} // End woa_wqfsp()
绝对没有意义,可能你应该返回类对象。
第三(您可能遇到错误): 这条线
add_action( 'init', array( $this, 'setup' ) );
在setup()
上调用init
方法,这是您班级缺乏的方法。
因此,如果我们总结一下,你会得到这个:
function woa_wqfsp() {
return new Woa_Wqfsp();
} // End woa_wqfsp()
woa_wqfsp();
class Woa_Wqfsp {
private $html;
private $product;
public function __construct() {
add_action( 'init', array( $this, 'setup' ) );
}
public function setup(){
// do setup
}
//Load plugin styles
function woa_wqfsp_stylesheet()
{
wp_enqueue_style( 'wqfspCSS', plugin_dir_path( 'css/style.css', __FILE__ ) );
}
function woa_add_quantity_fields( $html, $product ) {
if ( $this->$product && $this->$product->is_type( 'simple' ) && $this->$product->is_purchasable() && $this->$product->is_in_stock() && ! $this->$product->is_sold_individually() ) {
$html = '<form action="' . esc_url( $this->$product->add_to_cart_url() ) . '" class="cart" method="post" enctype="multipart/form-data">';
$html .= woocommerce_quantity_input( array(), $this->$product, false );
$html .= '<button type="submit" class="button alt">' . esc_html( $this->$product->add_to_cart_text() ) . '</button>';
$html .= '</form>';
}
return $html;
}
function woa_wqfsp_run() {
//Check if WooCommerce is active
if ( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
//add style for quantity field
add_action('wp_enqueue_scripts', $this->woa_wqfsp_stylesheet);
//add quantity fields
add_filter( 'woocommerce_loop_add_to_cart_link', $this->woa_add_quantity_fields, 10, 2 );
}
}
}//class end
另外,考虑到你的问题,你仍然有空间来提高你的OOP技能。看看this SO回答中列出的资源。