GET_OPTION/wp_LOCALIZE_SCRIPT在OOP插件中不起作用

时间:2020-02-15 作者:Brian Bruman

前几天在一个只包含函数的单文件php插件中实现了这一点。

现在我正在和WordPress Plugin Boilerplate 这是一种面向对象的方法,有很多不同的类。

简而言之,我正在查看两个不同的类/文件

includes/class-ebay-keyword-suggest.phpadmin/class-ebay-keyword-suggest-admin.php

第一个是核心插件类,第二个是特定于管理员的功能。

第一class-ebay-keyword-suggest.php __construct()\'s

public function __construct() {
    if ( defined( \'EBAY_KEYWORD_SUGGEST_VERSION\' ) ) {
        $this->version = EBAY_KEYWORD_SUGGEST_VERSION;
    } else {
        $this->version = \'1.0.0\';
    }
    $this->plugin_name = \'ebay-keyword-suggest\';

    $this->load_dependencies();
    $this->set_locale();
    $this->define_admin_hooks();
    $this->define_public_hooks();
    $this->register_admin_menu();
}
load_dependencies 加载class-ebay-keyword-suggest-admin.php 文件等。

以定义结束$this->loader 因此:

$this->loader = new Ebay_Keyword_Suggest_Loader();

define_admin_hooks 加载我的脚本和样式表

private function define_admin_hooks() {
    $plugin_admin = new Ebay_Keyword_Suggest_Admin( $this->get_plugin_name(), $this->get_version() );
    $this->loader->add_action( \'admin_enqueue_scripts\', $plugin_admin, \'enqueue_styles\' );
    $this->loader->add_action( \'admin_enqueue_scripts\', $plugin_admin, \'enqueue_scripts\' );
}
继续进行register_admin_menu:

private function register_admin_menu() {
    $plugin_admin = new Ebay_Keyword_Suggest_Admin( $this->get_plugin_name(), $this->get_version() );
    add_action( \'admin_init\', array( $plugin_admin, \'ebay_keyword_suggest_settings_init\' ) );
    add_action( \'admin_menu\', array( $plugin_admin, \'ebay_keyword_suggest_add_admin_menu\' ) );
    add_action( \'admin_enqueue_scripts\', array( $plugin_admin, \'enqueue_localize\' ) );
}
ebay_keyword_suggest_settings_init 是我注册选项/设置的位置ebay_keyword_suggest_settings 带回调

public function ebay_keyword_suggest_settings_init() { 

register_setting( \'pluginPage\', \'pluginPage\', array($this, \'ebay_keyword_suggest_settings\'));

add_settings_section(
    \'ebay_keyword_suggest_pluginPage_section\', 
    __( \'Your section description\', \'\' ),
    array($this, \'ebay_keyword_suggest_settings_section_callback\'),
    \'pluginPage\'
);

add_settings_field( 
    \'ebay_keyword_suggest_checkbox_field_0\', 
    __( \'Settings field description\', \'\' ), 
    array($this, \'ebay_keyword_suggest_checkbox_field_0_render\'),
    \'pluginPage\', 
    \'ebay_keyword_suggest_pluginPage_section\' 
);
}
中的下一行add_action 的功能register_admin_menu 通过ebay_keyword_suggest_add_admin_menu

public function ebay_keyword_suggest_add_admin_menu() {
    add_options_page( \'eBay Keyword Suggest\', \'eBay Keyword Suggest\', \'manage_options\', \'ebay_keyword_suggest\',  array($this, \'ebay_keyword_suggest_options_page\') );
}
然后我们来到这一行:

add_action( \'admin_enqueue_scripts\', array( $plugin_admin, \'enqueue_localize\' ) );

public function enqueue_localize( $hook ) {
    $getoption = get_option( \'ebay_keyword_suggest_settings\' );
    $enabled = $getoption[\'ebay_keyword_suggest_checkbox_field_0\'];
    wp_localize_script( $this->plugin_name, \'ekw_script_vars\', array( \'enabled\' => __($enabled) ) );
}
正如您所看到的get_option 在此变量下启动$getoption... 正在执行var_dump 始终返回false (当然wp_localize_script 无法正常工作,因为它没有获得正确的选项变量。

在一个php文件中实现这一点非常简单add_action\'函数和register_setting( \'pluginPage\', \'title_char_count_settings\' ); 然后用简单的get_option( \'title_char_count_settings\' );

这种面向对象的方法要复杂得多。。。我必须靠近我在想。。这个打嗝的地方在哪里?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

的第二个参数register_setting() 是要与一起使用的数据库选项名称get_option() 正如您在title_char_count_settings 选项:register_setting( \'pluginPage\', \'title_char_count_settings\' )get_option( \'title_char_count_settings\' );.

所以我猜你要么:

register_setting() 打电话给你ebay_keyword_suggest_settings_init() 功能:

// You used this:
register_setting( \'pluginPage\', \'pluginPage\', array($this, \'ebay_keyword_suggest_settings\'));

// But perhaps you meant this? (Note the option name - the second parameter)
register_setting( \'pluginPage\', \'ebay_keyword_suggest_settings\', array($this, \'ebay_keyword_suggest_settings\'));
get_option() 打电话给你enqueue_localize() 函数,您应该在其中使用get_option( \'pluginPage\' ). 但你不太可能使用pluginPage 作为该选项的名称?:)

相关推荐

wp_options is GB in size

我怎样才能找到占用这么大空间的选项或插件?这不是暂时的,因为删除所有数据后,它仍然是13GB。SELECT option_name, option_value FROM hihgv_options WHERE autoload = \'yes\'在0.141秒内返回833行SELECT SUM(LENGTH(option_value)) as autoload_size FROM hihgv_options WHERE autoload=\'yes\';返回670540当我将所有内容从我的自定义函数插件移