在管理中显示主页选项的最佳方式?

时间:2013-06-18 作者:Eric

我有一个自定义主页的网站,主页。php。在管理工具中显示可编辑主页选项的正确方法是什么?

例如,主页上有几个自定义文本字段,应该可以在管理工具中进行编辑。我正在寻找最好的方法来设置它,以便管理员用户可以更改这些选项。

UPDATE: 想象一下,一个网站的主页上有一个促销宣传语(文本字符串),我需要能够让管理员用户(非技术人员)轻松更新。我想知道如何在admin中显示一个屏幕,上面写着“你想在主页上显示什么促销文本?”[______________]“我曾想过通过widget来实现这一点,但这条路线很笨拙,需要我创建一个特殊的侧栏来容纳单个widget。实现这一点的最佳方法是什么?”?

6 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

这个问题有很多解决方案。我想他们每个人都是对的。这取决于您真正想要什么,以及此页面的用户/管理员最友好/清楚的内容。

我通常用三种方法来解决这个问题。我选择了哪一个?这取决于情况。有时我会同时使用其中的两个。

1。静态首页解决方案

当我可以将静态页面设置为首页时,我就会这样做。然后创建front-page.php 页面模板,并使用它定义主页/首页的外观。

要显示/允许编辑此页面上的一些自定义字段,我使用Advanced Custom Fields 插件。它允许您定义为首页设置的自定义字段(以及更多)。然后我使用front-page.php 模板来显示这些自定义字段值,它们应该显示在哪里。

如果这些值中的一些应该在每个页面上重复(在页脚、页眉等中),我会从主页上获得如下值:

$cf_value = get_post_meta( get_option(\'page_on_front\'), \'<CUSTOM FIELD NAME>\', true );
这是一个非常简单和干净的解决方案,当没有太多字段需要在其他页面上重复时。我想这对用户很友好。如果你想编辑主页,你只需要去做它——你可以在主页编辑器中编辑所有内容。

2。通用解决方案

我使用的另一个解决方案是定义一些主题选项。如果您想定义页面的外观(徽标图像、背景等),而不仅仅是内容(特别是如果您只想定义一个页面的内容),那么效果会更好。

我通常使用OptionTree 插件来完成此操作。但自己做这件事并不难。

我真的不喜欢你应该在主题选项中编辑页面内容的想法,所以我不经常使用这个解决方案。

3。当这些内容总是在其他页面上重复时,有时您必须在每个页面(或大部分页面)上显示一些值,而不仅仅是在主页上。然后,我认为“最好的”解决方案是将这些区域定义为侧栏,并允许用户使用小部件编辑它们。

如果重复的内容只有一行(页脚中的版权信息行等),并且不会经常更改,我可能会使用解决方案1。但是,如果它更复杂或者会经常更改,我想这个解决方案是最好的。

SO网友:nuResponse

我建议为家里创建一个代谢箱。php页面模板。使用高级自定义字段(ACF)插件很容易做到这一点。如果您想将这些内容构建到主题中,甚至可以使用“ACF Lite”,而不是使用插件。这里有一种快速简便的方法来实现您想要的内容。

创建一个仅显示在使用“home.php”模板文件的页面上的自定义元数据库

安装ACF插件(&L);激活它。(通过“Elliot Condon”搜索高级自定义字段,您可以通过WordPress仪表板执行此操作,也可以从WordPress存储库手动执行此操作:http://wordpress.org/plugins/advanced-custom-fields/

if(function_exists("register_field_group")) 
{
register_field_group(array (
    \'id\' => \'acf_home-page-promotional-text\',
    \'title\' => \'Home Page Promotional Text\',
    \'fields\' => array (
        array (
            \'default_value\' => \'\',
            \'formatting\' => \'none\',
            \'key\' => \'field_51c5184b7c590\',
            \'label\' => \'Promo Text\',
            \'name\' => \'promo_text\',
            \'type\' => \'text\',
            \'instructions\' => \'What promotional text would you like?\',
        ),
    ),
    \'location\' => array (
        array (
            array (
                \'param\' => \'page_template\',
                \'operator\' => \'==\',
                \'value\' => \'home.php\',
                \'order_no\' => 0,
                \'group_no\' => 0,
            ),
        ),
    ),
    \'options\' => array (
        \'position\' => \'normal\',
        \'layout\' => \'no_box\', // change \'no_box\' to \'default\' for box look.
        \'hide_on_screen\' => array (
        ),
    ),
    \'menu_order\' => 0,
));  
}
转到主页(此页面必须使用home.php模板文件“编辑页面->属性->模板”下拉列表)。

转到“home.php”模板文件,添加以下代码以显示自定义元框的内容,在本例中,该元框的名称为“promo\\u text”。

<?php if( get_field(\'promo_text\') ) { ?>
    <h3>
        <?php echo get_field(\'promo_text\'); ?>
    </h3>
<?php } ?> 
注意:get\\u字段是来自ACF插件的函数。如果您喜欢使用WP内置函数,可以使用:“get\\u post\\u meta($post\\u id,$key,$single);”相反这里有一个例子。

<?php
if( get_post_meta($post->ID, $\'promo_text\', true) ) { ?>
<h3>
<?php echo get_post_meta($post->ID, \'promo_text\', true); ?>
</h3>
<?php } ?>
以下是编辑主页时的外观:enter image description hereLarger Image link

现在您将看到metabox。注意,不需要插件就可以轻松完成此操作,只需将插件文件夹包含在主题文件夹中,并向活动主题的函数中添加include()。php文件。

我强烈推荐这个插件。。。它非常直观,有很多文档。如果您使用这个插件和var\\u dump(),您可以很快解决所有问题。

我希望这有帮助!

SO网友:s_ha_dum

很难从你的问题中准确地说出你在做什么,但如果你使用Options API, 然后get_option 接受默认值的第二个参数。抄本:

$no_exists_value = get_option(\'no_exists_value\');
var_dump($no_exists_value); /* ouput false */

$no_exists_value = get_option(\'no_exists_value\',\'default_value\');
var_dump($no_exists_value); /* output default_value */
如果您正在使用Theme Customizations API, 然后get_theme_mod, 喜欢get_option, 还接受第二个参数作为默认值。

使用任一选项,您都需要创建后端接口。如果使用Options API,则创建配置页add_menu_page 和/或add_submenu_page, 或one of these related functions.

如果您使用主题定制器,我不确定这是否适合您的项目,there is a whole different set of functions and techniques.

SO网友:tacudtap

如果我正确理解你的问题,你想创建一个主题选项面板,这样WordPress管理员。可以输入(例如)“你好,世界!”在文本框中,点击网站前端的“hello,world!”保存更改将显示在您决定在模板中调用它的任何位置。

您可以使用选项API执行此操作,如s_ha_dum 但我猜,如果你认为他的答案没有包含足够的细节,你真正的意思可能是,它比你希望的要复杂。

所以我的建议是安装Option Tree 该插件允许您快速轻松地创建一个主题选项面板(位于外观菜单下),其中包含一个文本字段,上面写着“您希望在主页上显示什么促销文本?”。然后,你所要做的就是在家中调用该选项的值。使用选项树函数的php模板。

希望这有帮助!

SO网友:Srihari

如果我在你的位置上,我会将自定义词添加到主题的管理/配置页面。这对我来说更容易,因为:

主题的管理页面中已经存在与视图修改相关的功能here 或常规插件挂钩方式详细说明here

SO网友:Greeso

我的做法(我现在也有类似的做法)如下:

在设置菜单(settings->home page settings)中创建一个新的菜单项,或在注释下或菜单末尾或您喜欢的任何地方创建一个新的主页菜单项。然后在新菜单项中创建页面。

在步骤1中提到的页面中,您可以为主页创建所有管理设置(当前和未来设置)。

确保该页面(及其菜单链接)仅可通过角色检查供管理员用户使用

如果愿意,您可以将上述解决方案作为专门创建额外设置页面的插件的一部分,并将其从主题中移除。因为这不是一个与主题相关的问题,而是管理区域的保管问题。

对我来说,正如我前面提到的,我正在按照这些思路做一些事情,并创建了一个插件。这对我将来很有帮助,如果我想改变我的主题,我不需要重复代码中需要删除和保留的内容。

希望这有帮助。

结束