首页 > 解决方案 > 为自定义 Woocommerce 插件存储动态值

问题描述

例子

我阅读了不同的文章,但它们描述了更多其他的东西。我不想用太多空间制作错误的代码。在模块中,将有一个可以在管理面板和其他无关功能中更改的值。如何正确地在插件中为该窗口的值创建数据库?我找到了文档,但如果是的话,我没有足够的经验来减少多余的部分。

我的代码/plugins/custom-counter/custom-counter.php

/*
Plugin Name: Custom Counter
Plugin URI: https://example.com
Description: This plugin adds counter.
Author: Kuznetsova Alexandra
Author URI: https://example.com
*/

// Hook for adding admin menus
add_action('admin_menu', 'custom_counter_menu');

// action function for above hook
function custom_counter_menu() {
    // Add a submenu to Woocommerce menu:
    add_submenu_page('woocommerce', 'Custom Counter', 'Custom Counter', 'administrator', 'custom-counter', 'custom_counter_page');
}

// custom_counter_page() displays the page content
function custom_counter_page() {
    ?>
    <div class="wrap">
        <h2>Custom Counter</h2>

        <form method="post" action="options.php">
            <?php settings_fields( 'baw-settings-group' ); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">Total Counter</th>
                    <td><input type="text" name="custom-counter" value="..." /></td>
                </tr>
            </table>

            <p class="submit">
                <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
            </p>
        </form>
    </div>
<?php }

标签: phphtmlwordpresspluginswoocommerce

解决方案


已更新- 由于这是一个将多次更新的唯一值,因此您可以将wp_options表格与以下 WordPress 专用功能一起使用:

如果您使用下面将看到的一些技巧来避免缓存此数据,则缓存选项的事实不是问题。

所以试试下面的代码:

// Add a custom admin submenu to Woocommerce
add_action('admin_menu', 'custom_counter_menu');
function custom_counter_menu() {
    add_submenu_page('woocommerce', 'Custom Counter', 'Custom Counter', 'administrator', 'custom-counter', 'custom_counter_page');
}

// Content for the custom Woocommerce admin submenu
function custom_counter_page() {
    $option_name = 'wc-custom-counter' ;
    if( isset($_POST[$option_name]) ){
        $new_value = sanitize_text_field( $_POST[$option_name] );
        if ( get_option( $option_name ) !== false ) {
            update_option($option_name, $new_value );
        } else {
            add_option( $option_name, $new_value, null, 'no' );
        }
    }
    $default = ''; // Set the default value
    $value = get_option( $option_name ) ? get_option( $option_name ) : $default;
    ?>
    <div class="wrap">
        <h2><?php _e('Custom Counter'); ?></h2>
        <form method="post" action="">
            <?php settings_fields( 'baw-settings-group' ); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row"><?php _e('Total Counter'); ?></th>
                    <td><input type="text" name="<?php echo $option_name; ?>" value="<?php echo $value; ?>" /></td>
                </tr>
            </table>
            <p class="submit">
                <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
            </p>
        </form>
    </div>
    <?php 
}

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。

如果该选项已经存在,为避免缓存问题,您应该使用以下命令将其删除:

delete_option('wc-custom-counter');

并将其添加到您的 function.php 文件中。然后浏览您网站的任何页面并将其删除。


推荐阅读