小部件应该如何引用添加到自定义子菜单或添加菜单字段中的内容?

时间:2016-10-16 作者:DᴀʀᴛʜVᴀᴅᴇʀ

进入高级插件开发阶段,我一直在关注Plugin Handbook 但我没有看到它提到如何引用已添加到设置页面的内容。例如,当您访问sample settings page 创建的菜单为:

function wporg_options_page() {
    // add top level menu page
    add_menu_page(
        \'WPOrg\',
        \'WPOrg Options\',
        \'manage_options\',
        \'wporg\',
        \'wporg_options_page_html\'
    );
}
在此页面上有一个字段:

function wporg_field_pill_cb($args) {
    // get the value of the setting we\'ve registered with register_setting()
    $options = get_option(\'wporg_options\');
    // output the field
    ?>
    <select id="<?= esc_attr($args[\'label_for\']); ?>"
            data-custom="<?= esc_attr($args[\'wporg_custom_data\']); ?>"
            name="wporg_options[<?= esc_attr($args[\'label_for\']); ?>]"
    >
        <option value="red" <?= isset($options[$args[\'label_for\']]) ? (selected($options[$args[\'label_for\']], \'red\', false)) : (\'\'); ?>>
            <?= esc_html(\'red pill\', \'wporg\'); ?>
        </option>
        <option value="blue" <?= isset($options[$args[\'label_for\']]) ? (selected($options[$args[\'label_for\']], \'blue\', false)) : (\'\'); ?>>
            <?= esc_html(\'blue pill\', \'wporg\'); ?>
        </option>
    </select>
    <p class="description">
        <?= esc_html(\'You take the blue pill and the story ends. You wake in your bed and you believe whatever you want to believe.\', \'wporg\'); ?>
    </p>
    <p class="description">
        <?= esc_html(\'You take the red pill and you stay in Wonderland and I show you how deep the rabbit-hole goes.\', \'wporg\'); ?>
    </p>
    <?php
}
如果我想创建一个小部件来引用wporg_field_pill_cb 功能我浏览了标签 但我看不到什么坚实的东西。当我引用时

文档中的何处讨论了如何引用该设置页面中使用的内容?是否调用注册设置wporg_options 在里面widget()?

如果不清楚,我深表歉意,但我的目标是学习如何在子菜单或顶部菜单中创建一个表单,其中的设置将由小部件引用或由小部件呈现。我以上面的设置插件为例,查看在设置页面中我将使用什么来获取所选的选项值。

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

该代码中演示了设置API的用法,该API旨在用作创建设置页面的框架,从而更新选项中的值。

小部件设置是更抽象的级别。它们存储在选项中,但存储方式没有灵活性,它们都存储为设置的大部分常量字段的数组,其中索引是小部件标识符。

这个抽象概念widgets API 遵循与设置API不同的流。

打电话没问题get_option 您需要它的任何地方都可以使用小部件代码,但这是您可能需要的唯一集成。

您不应该在保存小部件时设置选项,因为这种副作用会让用户感到困惑,而定制者会(不记得为什么)抱怨。

您可以管理小部件是一个设置页面,但小部件的存储和检索方式是核心中文档记录最少的领域之一,虽然这肯定是可能的,但它并不是很琐碎,我不记得有人这样做过。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'