插件输出样式/模板的正确方法

时间:2013-02-17 作者:urok93

我正在创建一个插件,需要在网站前端输出东西。我试图保持默认外观尽可能干净,但我也希望用户能够轻松修改。

我的想法是,如果用户在其主题中创建了一个具有特定名称的样式表,则可以加载自定义样式表而不是默认样式表。关于如何构建该功能,有什么建议吗?

在更极端的情况下,用户希望完全更改用于输出的HTML/PHP,我创建了一个操作,并将显示函数附加到该操作。这样,用户就可以取消附加我的默认显示功能,并通过可用的挂钩附加他的自定义显示功能。

这是正确的方法吗?

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

让主题开发人员尽可能简单。大多数不是程序员。有两个非常简单的选项:

add\\u theme\\u support()和get\\u theme\\u support()

提供一个标识符和一些选项。假设您的标识符是drtanz_plugin. 主题作者现在可以在其主题中添加以下内容functions.php:

add_action( \'after_setup_theme\', \'prefix_register_theme_support\' );

function prefix_register_theme_support()
{
    add_theme_support(
        \'drtanz_plugin\',
        array (
            \'template\'   => get_template_directory() . \'/templates/drtanz_plugin.php\',
            \'stylesheet\' => FALSE
        )
    );
}
现在,您可以在插件中检查主题支持:

$plugin_options = array (
    \'template\'      => get_template_directory() . \'/templates/drtanz_plugin.php\',
    \'stylesheet\'    => plugins_url( \'default.css\', __FILE__ ),
    \'show_comments\' => TRUE
);

if ( $theme_options = get_theme_support( \'drtanz_plugin\' ) )
    $plugin_options = array_merge( $plugin_options, $theme_options );
主题作者没有更改show_comments 参数,因此使用默认值。

优点:易于扩展,功能强大<缺点:对某些人来说可能已经太难了。

使用locate\\u template()

我在插件中做到了这一点T5 Opera Speed Dial Preview. 只需检查主题中是否有具有给定名称的模板,然后尝试获取路径。如果找不到模板,请使用自己的模板。

$template = \'speed-dial.php\';
$path     = locate_template( array ( $template ) );

if ( \'\' != $path and file_exists( $path ) )
    require $path;
else
    require dirname( __FILE__ ) . "/$template";
优点:易学。请确保您使用的名称是唯一的。您可以添加*_theme_support 如果需要,请稍后提供功能<缺点:它实际上只是一个模板,没有其他功能。以后不能更改模板名称,因为这会破坏一切。

您可以将这两种方法结合起来,但我只会使用其中一种。它更容易学习。

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require