在开发 WooCommece 主题或插件的时候,我们经常需要设置一些数据,比如做支付插件的时候,我们需要保存支付网关的一些数据到数据库中,这时候,我们就需要用到WooCommerce的设置接口来为插件增加一些设置选项了,WooCommerce的设置 Api 使用起来非常简单,和我们常用的 WordPress 字段插件很类似。WooCommerce的整个设置选项就是通过设置 Api 实现的。下面我们来看一下怎么使用 WooCommerce 设置 Api 增加设置选项。
定义表单字段
我们可以使用 init_form_fields 方法在类构造器中定义设置选项字段:
$this->init_form_fields();
加载设置之前,我们必须已经定义了该设置,定义设置的代码示例如下,我们只需要设置一个 form_fields 数组就可以了。
/**
* 初始化网关设置表单字段
*/
function init_form_fields() {
$this->form_fields = array(
'title' => array(
'title' => __( '标题', 'woocommerce' ),
'type' => 'text',
'description' => __( '用户结账时看到的支付网关标题', 'woocommerce' ),
'default' => __( '支付宝支付', 'woocommerce' )
),
'description' => array(
'title' => __( '描述', 'woocommerce' ),
'type' => 'textarea',
'description' => __( '用户结账时看到的支付网关描述', 'woocommerce' ),
'default' => __("使用支付宝支付,安全又便捷。", 'woocommerce')
)
);
}
在上面的示例代码中,我们定义了两个选项 – 标题和描述。标题是一个文本字段,描述是一个多段文本字段,注意上面代码中设置默认值和选项的方法,我们可以添加各种表单类型的选项,下面是支持的表单类型格式:
'option_name' => array(
'title' => '设置页面的标题',
'description' => '设置页面的描述信息',
'type' => 'text|password|textarea|checkbox|select|multiselect',
'default' => '选项的默认值',
'class' => '输入框的 CSS Class',
'css' => ' 输入框的 CSS 样式',
'label' => 'Label', // 只有类型为 checkbox 时使用
'options' => array(
'key' => 'value'
)
)
显示管理选项
创建一个名为 admin_options 的方法,包含以下代码:
function admin_options() {
?>
<h2><?php _e('插件名称','woocommerce'); ?></h2>
<table class="form-table">
<?php $this->generate_settings_html(); ?>
</table>
<?php
}
上面的代码将以正确的格式输出我们的设置。
保存管理选项
有了更设置选项输入界面,我们还需要保存设置选项到我们的数据库中,只需要把我们保存数据的方法挂载到 process_admin_options 钩子上即可。WooCommerce支付网关挂载到网关保存动作上:
add_action('woocommerce_update_options_payment_gateways', array(&$this, 'process_admin_options'));
add_action('woocommerce_update_options_shipping_methods', array(&$this, 'process_admin_options'));
加载设置
保存了设置后,我们就可以加载我们已经保存的设置了:
// 加载设置
$this->init_settings();
完成上面工作后,我们可以从设置API中加载 设置值 – 上面的 init_settings 方法会自动处理设置值。
// 定义用户设置的变量
$this->title = $this->settings['title'];
$this->description = $this->settings['description'];
学会通过 Settings API 为WooCommerce添加自定义设置选项是通过WooCommerce高级开发的必经之路,对 WooCommerce Development有兴趣,想在这方便深入发展的,可以深入了解尝试一下。如果在开发过程中遇到了问题,欢迎在评论中提出讨论。