标签:wordpress php plugins wordpress-plugin woocommerce
我在woocommerce做了一个小插件.在那个插件中,我想在管理区域显示部分,就像在woocommerce设置仪表板的运输选项卡中发送选项,统一费率,免费送货等.首先,我从插件创建了一个选项卡,在该选项卡中我想要这些部分.为了创建选项卡,我已经从这个link获取代码所以我的插件代码是这样的
<?php
/**
* Plugin Name: WooCommerce Settings Tab
* Plugin URI: http://www.wordpress.org
* Description: Woocmmerce settings tab.
* Author: Author Name
* Author URI: http://www.wordpress.org
* Version: 1.0
*
*/
class WC_Settings_Tab {
public static function init() {
add_filter( 'woocommerce_settings_tabs_array', __CLASS__ . '::add_settings_tab', 50 );
add_action( 'woocommerce_settings_tabs_settings_tab_demo', __CLASS__ . '::settings_tab' );
add_action( 'woocommerce_update_options_settings_tab_demo', __CLASS__ . '::update_settings' );
add_action( 'woocommerce_sections',__CLASS__ . '::get_sections');
}
public static function add_settings_tab( $settings_tabs ) {
$settings_tabs['settings_tab_demo'] = __( 'Settings Demo Tab', 'woocommerce-settings-tab-demo' );
return $settings_tabs;
}
public static function settings_tab() {
woocommerce_admin_fields( self::get_settings() );
}
public static function update_settings() {
woocommerce_update_options( self::get_settings() );
}
public function get_sections() {
$sections = array(
'' => __( 'Test Link 1', 'woocommerce' ),
'testlink2' => __( 'Test Link 2', 'woocommerce' ),
);
return apply_filters( 'woocommerce_sections', $sections );
}
public static function get_settings() {
$settings = array(
'section_title' => array(
'name' => __( 'Section Title', 'woocommerce-settings-tab-demo' ),
'type' => 'title',
'desc' => '',
'id' => 'wc_settings_tab_demo_section_title'
),
'title' => array(
'name' => __( 'Title', 'woocommerce-settings-tab-demo' ),
'type' => 'text',
'desc' => __( 'This is some helper text', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_title'
),
'description' => array(
'name' => __( 'Description', 'woocommerce-settings-tab-demo' ),
'type' => 'textarea',
'desc' => __( 'This is a paragraph describing the setting. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda.', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_description'
),
'section_end' => array(
'type' => 'sectionend',
'id' => 'wc_settings_tab_demo_section_end'
)
);
return apply_filters( 'wc_settings_tab_demo_settings', $settings );
}
}
WC_Settings_Tab::init();
但它没有显示这些部分.那么有人可以告诉我如何在woocommerce设置选项卡中添加部分吗?任何帮助和建议都会非常明显.
解决方法:
我试图已经2x回答了这个问题.我的部分工作在我的插件中,但是你发现它是一个可以解决的野兽.最好的例子是如何添加运输/支付网关……如果您可以访问其中任何一个.这种情况取决于你是否正在制作一些你希望以那些方式扩展的东西.
无论如何,因为我几乎找不到我正在使用的代码,我试图将其压缩成一个控制所有部分的文件.
首先加载设置文件.
add_filter( 'woocommerce_get_settings_pages', 'so_26355697_add_settings_page' );
function so_26355697_add_settings_page( $settings ) {
$settings[] = include( 'wc-plugin-settings.php' );
return $settings;
}
然后在wc-plugin-settings.php文件中(必须返回一个类对象)…
class WC_Settings_My_Plugin extends WC_Settings_Page {
/**
* Constructor
*/
public function __construct() {
$this->id = 'demo_plugin';
add_filter( 'woocommerce_settings_tabs_array', array( $this, 'add_settings_tab' ), 50 );
add_action( 'woocommerce_sections_' . $this->id, array( $this, 'output_sections' ) );
add_action( 'woocommerce_settings_' . $this->id, array( $this, 'output' ) );
add_action( 'woocommerce_settings_save_' . $this->id, array( $this, 'save' ) );
}
/**
* Add plugin options tab
*
* @return array
*/
public function add_settings_tab( $settings_tabs ) {
$settings_tabs[$this->id] = __( 'Settings Demo Tab', 'woocommerce-settings-tab-demo' );
return $settings_tabs;
}
/**
* Get sections
*
* @return array
*/
public function get_sections() {
$sections = array(
'section-0' => __( 'Plugin Options', 'woocommerce-settings-tab-demo' ),
'section-1' => __( 'Section 1', 'woocommerce-settings-tab-demo' ),
'section 2' => __( 'Section 2', 'woocommerce-settings-tab-demo' ),
);
return apply_filters( 'woocommerce_get_sections_' . $this->id, $sections );
}
/**
* Get sections
*
* @return array
*/
public function get_settings( $section = null ) {
switch( $section ){
case 'section-0' :
$settings = array(
'section_title' => array(
'name' => __( 'Main Section Title', 'woocommerce-settings-tab-demo' ),
'type' => 'title',
'desc' => '',
'id' => 'wc_settings_tab_demo_title_section-1'
),
'title' => array(
'name' => __( 'Main Title', 'woocommerce-settings-tab-demo' ),
'type' => 'text',
'desc' => __( 'This is some helper text', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_title_section-1'
),
'description' => array(
'name' => __( 'Main Description', 'woocommerce-settings-tab-demo' ),
'type' => 'textarea',
'desc' => __( 'This is a paragraph describing the setting. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda.', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_description_section-1'
),
'section_end' => array(
'type' => 'sectionend',
'id' => 'wc_settings_tab_demo_end-section-1'
)
);
break;
case 'section-1':
$settings = array(
'section_title' => array(
'name' => __( 'Section One Title', 'woocommerce-settings-tab-demo' ),
'type' => 'title',
'desc' => '',
'id' => 'wc_settings_tab_demo_section_title_section-2'
),
'title' => array(
'name' => __( 'Section One Title', 'woocommerce-settings-tab-demo' ),
'type' => 'text',
'desc' => __( 'This is some helper text', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_title_section-2'
),
'description' => array(
'name' => __( 'Section One Description', 'woocommerce-settings-tab-demo' ),
'type' => 'textarea',
'desc' => __( 'This is a paragraph describing the setting. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda.', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_description_section-2'
),
'section_end' => array(
'type' => 'sectionend',
'id' => 'wc_settings_tab_demo_section_end_section-2'
)
);
break;
case 'section-2':
$settings = array(
'section_title' => array(
'name' => __( 'Section Two Title', 'woocommerce-settings-tab-demo' ),
'type' => 'title',
'desc' => '',
'id' => 'wc_settings_tab_demo_section_title'
),
'title' => array(
'name' => __( 'Section Two Title', 'woocommerce-settings-tab-demo' ),
'type' => 'text',
'desc' => __( 'This is some helper text', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_title'
),
'description' => array(
'name' => __( 'Section Two Description', 'woocommerce-settings-tab-demo' ),
'type' => 'textarea',
'desc' => __( 'This is a paragraph describing the setting. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda. Lorem ipsum yadda yadda yadda.', 'woocommerce-settings-tab-demo' ),
'id' => 'wc_settings_tab_demo_description'
),
'section_end' => array(
'type' => 'sectionend',
'id' => 'wc_settings_tab_demo_section_end'
)
);
break;
}
return apply_filters( 'wc_settings_tab_demo_settings', $settings, $section );
}
/**
* Output the settings
*/
public function output() {
global $current_section;
$settings = $this->get_settings( $current_section );
WC_Admin_Settings::output_fields( $settings );
}
/**
* Save settings
*/
public function save() {
global $current_section;
$settings = $this->get_settings( $current_section );
WC_Admin_Settings::save_fields( $settings );
}
}
return new WC_Settings_My_Plugin();
正如我所说的,这并不是Woo如何做到的,甚至我在自己的代码中是如何做到的.但是,我认为这是最简单的方法.如果您需要可以扩展的东西,这将是不合适的,但这也更难写.
标签:wordpress,php,plugins,wordpress-plugin,woocommerce 来源: https://codeday.me/bug/20190528/1172556.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。