创建将添加选项的插件。选项菜单页面应该放在哪里?

时间:2013-03-11 作者:Jrod

我正在为餐厅主题创建一个插件,该插件将提供一些选项来添加餐厅的营业时间。目前,我使用自定义帖子类型来控制餐厅时间,但后来意识到这是一种不好的做法,因为如果主题发生变化,信息将丢失。我想通过插件将它们分开,并使用选项而不是自定义帖子类型。

选项菜单页面的放置位置是否有标准做法?主题定制器页面?插件设置?自定义页面?设置部分下的新页面?

Update

计划使用现有的wordpress API,所以我不担心数据的存储。

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

我把你的问题理解为“选项菜单页面的位置是否有标准做法?”

是否有标准实践来确定选项的放置位置?

我不这么认为,但有更好和更坏的地方。

主题定制器页面?

不。这与您担心当前设置的原因相同。它与一个特定的主题相关联,不容易转移到一个新的主题。

插件设置?

这可能会起作用,但设置会有些隐藏。进入插件设置页面并不是特别简单。

自定义页面?

你是说在“帖子”、“页面”、“链接”之类的东西旁边有一个新的顶级菜单?这也可以工作,但我会回避它,除非你有许多不同的配置页面添加到主菜单下。很容易在侧边栏上创建大量杂乱内容。

设置部分下的新页面?

这似乎是我添加单一菜单的最佳位置。从逻辑上讲,您正在创建的内容非常符合“设置”,并且在大多数情况下都会过时。它与特定的主题无关。

不清楚您计划将选项保存在数据库中的什么位置,但我假设您将使用Options API 将数据存储在*_options 桌子这个Settings API 值得研究以帮助构建/管理表单。

SO网友:tfrommen

您正在解决两件事:

将数据存储在哪里(意思是:数据库中的哪个表)

Storage

首先,您可能需要注册一个新设置(在options 表):

register_setting( \'my_restaurant_options\', \'my_restaurant_options\' );
$restaurant_options = array(
    \'option_1\' => VALUE,
    ...
    \'option_n\' => VALUE,
);
update_setting( \'my_restaurant_options\', $restaurant_options );

Settings

更改设置的最简单方法是通过专用页面。放置此页面的位置(新建菜单页面、设置子菜单页面、选项子菜单页面…)由你决定。

如果只是主题选项,为什么不在设计/主题中放置一个子菜单页?

SO网友:Simon

自定义post类型本身绝对没有什么,但是如果您只存储来自几个输入字段的数据,其中每个字段都有自己的特定用途,那么您可能需要使用Settings API 相反移动你的插件(样式)的帖子类型和设置,并通过插件(功能)提供它们,这是一个极好的决定。

设置API相当简单。它允许将设置字段添加到现有的设置部分(常规、讨论、永久链接等),以及将子页面添加到管理部分中的任何顶级导航项目和您自己的顶级页面。根据需要,您可以将设置字段添加到现有页面或添加自己的页面。

This is a good example 如何在阅读设置页面中添加两个字段,下面有一个清晰的插图。基本上,要添加页面、子页面、设置部分和设置字段,您要做的是:

// Example code to illustrate page/subpage/setting relationships, might not work as intended or break
function wpse_90342_admin_menu {
    // Top level menu page (http://codex.wordpress.org/Function_Reference/add_menu_page)
    add_menu_page(\'Page title\', \'Menu item title\', \'manage_options\', basename(__FILE__), \'wpse_90342_page_callback\',   plugins_url(\'images/icon.png\', __FILE__), 6);

    // Sub menu page (http://codex.wordpress.org/Function_Reference/add_submenu_page)
    add_submenu_page( basename(__FILE__), \'My Plugin Tools Page Title\', \'My Plugin Tools Menu Title\', \'manage_options\', \'my_plugin_tools\', \'wpse_90342_subpage_callback\' ); 

    // Settings section
    add_settings_section(\'eg_setting_section\', \'Example settings section on subpage\', \'eg_setting_section_callback_function\', \'my_plugin_tools\');

    // Settings field
    add_settings_field(\'eg_setting_name\', \'Example setting Name\', \'eg_setting_callback_function\', \'my_plugin_tools\', \'eg_setting_section\');

    // Register the settings field
    register_setting(\'my_plugin_tools\', \'eg_setting_name\');
}
add_action(\'admin_menu\', \'wpse_90342_admin_menu\');

function wpse_90342_page_callback() {
    echo "This is the top level page";
}

function wpse_90342_subpage_callback() {
    echo "This is the subpage";

    do_settings_sections(\'my_plugin_tools\' );
    settings_fields( \'my_plugin_tools\' );

    submit_button();
}

function eg_setting_section_callback_function() {
    echo "Section header";
}

function eg_setting_callback_function() {
    echo "Settings field";
}
您可能需要查看以下文档:add_menu_pageadd_submenu_page 因为它们需要大量的参数,为了使页面/子页面/字段符合预期的层次结构,这些参数可能需要在两者之间保持一致。

结束

相关推荐

暂时授予“Manage_Options”功能

为了允许编辑编辑编辑其他人的author meta(update\\u user\\u属性),我必须给他们“manage\\u options”功能,否则我会收到一条“作弊”消息。我只想在一个特定的编辑作者元页面上给他们这个功能。我为“list\\u users”授予“editor”权限,以访问users admin表。在进入特定的作者元页面时,我授予“编辑器”权限以“管理\\u选项”。(我尝试将其放置在函数save\\u profile\\u字段的顶部,但仍然收到了死亡消息。)我删除了save\\u p