wordpress 如何正确地将附加选项添加到WooCommerce支付网关的选项页面?

gblwokeq  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(158)

我正在开发一个插件,当WooCommerce中存在特定的支付网关时,它将执行一些功能,并且我的插件选项被添加到与网关选项相同的选项页面是有意义的。我不想以任何方式改变网关的行为,只是在相同的选项页面上显示我的插件选项。
基于this document,我产生了这段代码。

<?php

class MyPluginClass {   
    
    /**
    * Initialise the class
    **/

    public function init() {

        // Hook into the Payment tab of WooCommerce settings and add 
        // options to the Gateway's options page
        // (Tab's ID is 'checkout' even though the tab is called payments)

        add_filter( 'woocommerce_get_settings_checkout', array($this, 'add_options_to_gateway_options_page'), 10, 2 );
    }

    /**
    * Add options to the gateway's options page
    **/

    public function add_options_to_gateway_options_page( $settings, $current_section_id ) {

        // If the current section is not the required gateway, return the settings
        // (replace gateway_id with the actual gateway ID. this is 
        // the 'section' argument from the URL when viewing the gateway's options page)

        if ( 'gateway_id' != $current_section_id  ) return $settings;

        // Create settings

        $my_settings = array(
            array (
                'title' => __('Automation options'),
                'type' => 'title',
                'description' => ''
            ),
            array(
                'id' => 'my_plugin_enabled',
                'name' => 'my_plugin_enabled',
                'title' => __('Gateway automations', 'my_plugin'),
                'label' => __('Enable gateway automations', 'my_plugin'),
                'description' => __('Enable the gateway automations plugin', 'my_plugin'),
                'desc_tip' => true,
                'type' => 'checkbox',
                'default' => 'yes'
            ),
            array(
                'type' => 'sectionend',
                'id' => 'my_plugin'
            )
        );

        return $my_settings;
    }
}

$myPlugin = new MyPluginClass;
$myPlugin->init();

复选框工作正常,其值保存到数据库中,页面加载时阅读正常,页面上的其他选项沿着是如此。标题和复选框显示在屏幕上的预期位置,复选框在第一次加载时默认为选中状态。但是,标签和带有说明的工具提示不显示。

// The resulting HTML

<h2>Automation options</h2>
<table class="form-table">
    <tbody>
        <tr valign="top" class="">
            <th scope="row" class="titledesc">Gateway automations</th>
            <td class="forminp forminp-checkbox">
                <fieldset>
                    <legend class="screen-reader-text"><span>Gateway automations</span></legend>
                    <label for="my_plugin_enabled">
                        <input name="my_plugin_enabled" id="my_plugin_enabled" type="checkbox" class="" value="1">
                    </label>
                </fieldset>
            </td>
        </tr>
    </tbody>
</table>

是我做错了什么还是哪里出了问题?
更新
所以我做了一点小错误。我把'description' => __('...改为'desc' => __('...,现在描述显示在复选框下面,但不是在帮助气泡中。奇怪的是,我在复选框下面添加了几个字段,遵循相同的方案,描述帮助气泡正在工作。
但是,'label' => __('...仍然不适用于任何字段。

yks3o0rb

yks3o0rb1#

我不认为这是正确的钩,我相信这将火对客户结帐以及。
这里有一个快速的函数来完成你所追求的,但是看起来你只能有一个“标签”或者一个工具提示,desc_tip是将它设置为工具提示的东西。
如果您正在创建自己的网关,则最好扩展现有类并使用$this->init_form_fields();,但如果您知道目标网关的ID,则这应该可以满足您的需求

/**
 * Init action to add the custom field to the payment gateways we want.
 * @return void
 */
function add_custom_field_to_gateways(): void {
    $gateway_ids_to_add_options_to = array(
        'cod',
        'bacs',
    );
    foreach ( $gateway_ids_to_add_options_to as $gateway_id ) {
        add_filter( 'woocommerce_settings_api_form_fields_' . $gateway_id, 'add_my_plugin_options', 10, 1 );
    }
} add_action( 'init', 'add_custom_field_to_gateways' );

/**
 * Add custom fields to the payment gateway settings page
 * by hooking into the gateway's settings array.
 *
 * @param array $settings
 * @return array
 */
function add_my_plugin_options( array $settings ): array {
    $settings['my_plugin_enabled'] = array(
        'id'          => 'my_plugin_enabled',
        'name'        => 'my_plugin_enabled',
        'title'       => __( 'Gateway automations', 'my_plugin' ),
        'label'       => __( 'Enable gateway automations', 'my_plugin' ),
        'description' => __( 'Enable the gateway automations plugin', 'my_plugin' ),
        'desc_tip'    => true,
        'type'        => 'checkbox',
        'default'     => 'yes',
    );
    $settings['settingWithLabel']  = array(
        'title'       => 'Setting with label',
        'label'       => 'Setting with label',
        'type'        => 'text',
        'description' => 'Setting with label',
        'desc'        => 'Setting with label',
        'default'     => 'default',
        'desc_tip'    => false,
    );
    return $settings;
}

相关问题