显示GET_OPTION中的数据时出现问题

时间:2017-11-23 作者:Adrian

get\\u option函数有问题。我创建了选项页面,其中有一个字段用于表单中的测试。所有内容都将数据保存到数据库中,但当我尝试显示它时,我得到了“未定义的索引”,但该索引存在于get\\u选项数组中:

Array
(
    [\'turn_on\'] => 1
)
当我尝试时:

print_r($variable);
我有点想起来,但当我尝试时:

print_r($variable[\'turn_on\']);
我得到了未定义的索引,有人知道为什么会这样工作,我如何修复它吗?

//编辑

if (!class_exists(\'GoToTopOrBottom\')) {
    class GoToTopOrBottom {
        private $options;

        public function __construct()
        {
            $this->parent_slug = \'wtyczki\';
            $this->slug = \'go-to-top-or-bottom\';

            add_action(\'admin_menu\', [$this, \'addSubpage\']);
            add_action(\'admin_init\', [$this, \'registerFields\']);
        }

        public function addSubpage ()
        {
            add_submenu_page(
                $this->parent_slug,
                \'Przejście w górę lub dół\',
                \'Góra lub dół\',
                \'manage_options\',
                $this->slug,
                [
                    $this,
                    \'view\'
                ]
            );
        }

        public function view()
        {
            require_once(plugin_dir_path(__DIR__) . \'/views/go-to-top-or-bottom/go-to-top-or-bottom.php\');
        }

        public function registerFields()
        {
            register_setting(
                \'go_to_top_or_bottom_group\',
                \'go_to_top_or_bottom\'
            );

            add_settings_field(
                \'turn_on\',
                null,
                null,
                $this->slug
            );
        }
    }

    if (is_admin()) {
        new GoToTopOrBottom;
    }
}
并在管理选项页上查看表单

<div class="mt-3">
    <h3>Powrót do góry lub dołu strony</h3>
    <HR />
    <form method="post" action="options.php">
        <?php
        $this->options = get_option(\'go_to_top_or_bottom\');
            settings_fields(\'go_to_top_or_bottom_group\');
        ?>
        <pre>
            <?php
             print_r($this->options[\'turn_on\']);
            ?>
        </pre>
        <div class="row">
            <div class="col-8">
                <div class="row">
                    <div class="col-12 col-sm-6">
                        <div class="form-group">
                            <label class="custom-control custom-checkbox">
                                <input type="checkbox" class="custom-control-input" name="go_to_top_or_bottom[\'turn_on\']" value="1">
                                <span class="custom-control-indicator"></span>
                                <span class="custom-control-description">Włączyć plugin?</span>
                            </label>
                        </div>
                    </div>

                    <div class="col-12 col-sm-6">
                        test
                    </div>
                </div>
            </div>

            <div class-"col-4">
                <button type="submit" name="submit" id="submit" class="btn btn-primary">Zapisz zmiany</button>
            </div>
        </div>
    </form>
</div>

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

插入get_option(\'go_to_top_or_bottom\');作为$this->options 所以当你真的试着这样打印的时候print_r($this->options[\'turn_on\']);您得到索引错误,因为这是一个属性!!!

正确的方法是$this->options[\'turn_on\']=get_option(\'go_to_top_or_bottom\');

更新我看到$options 是私有的,表示您不能在类外访问它。

解决方案将类型更改为public 或引入另一个属性作为public.

如果您不想更改Class 您可以创建一个变量,以便在视图文件中使用它,如下所示:

$options=get_option(\'go_to_top_or_bottom\');

并使用$options["\'turn_on\'"];请注意单引号(这是由于引用名称的序列化)。

结束