插件定义自定义POST类型档案模板的最佳方式?

时间:2012-01-05 作者:goldenapples

我正在开发一个插件,它可以注册一个新的帖子类型,我希望能够为归档页面定义一个默认循环。我一直在努力集思广益,想出最好的方法来做这件事,但我一直在努力。

基本上,我需要做的是:

我的帖子类型应在归档页面中仅显示为标题、摘录和自定义字段。我还需要在归档页面上运行某些过滤器。

我一直在要求用户创建自己的存档{myposttype}。php文件,但这对临时网站所有者来说有点过头了。

因此,我的想法包括:

正在创建我自己的模板文件,并将其加载到template\\u重定向挂钩上。。。可能是错误的,因为实际上没有办法为给定的主题生成正确的标记

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

如果其他人遇到这个问题,我将发布我最终为我的“推荐链接”插件提供的解决方案。我认为它很好地解决了我预期的大多数问题。

  1. For users who want to completely customize the output, give the option of using the default WP archive template.

    这是最好的解决方案,因为它充分利用了WordPress的所有查询功能和条件,尽管其方式过于密集,普通用户不必创建自己的查询archive-reclinks.php 模板,并用正确的逻辑和标记填充它。我预计可能只有不到5%的用户会选择这个选项,但这是为那些想要的人准备的。

  2. For ease of setup, allow users to choose an existing page to hold the archive.

    我从“设置>贴子页面”对话框借用了此样式,并将所选页面存储在选项中。我刚刚筛选的the_content 那页有我自己的档案。

  3. For overridable archive styling, use locate_template() to allow users to override the plugins markup from their theme directory.

    这是我能想到的最优雅的解决方案。我在插件目录中包含了一个名为loop-reclinks.php 并使用locate\\u template()将其包含在用户定义归档页面内容的“我的过滤器”中,如下所示:

    $old_query = $wp_query;
    $wp_query = new WP_Query( array(
        //  ... my archive query settings here
    ) );
    ob_start();
    if ( \'\' === locate_template( \'loop-reclinks.php\', true, false ) )
        include( \'loop-reclinks.php\' );
    $links_archive = ob_get_clean();
    
    $wp_query = $old_query;
    wp_reset_query();
    
    return $content . $links_archive;
    
    (为清晰起见,截断)

    因此,最终的结果是覆盖我定义的循环模板就像复制loop-reclinks.php 到当前主题目录并对其进行修改;而所有的业务和查询逻辑仍由插件处理。

    希望这对其他人有帮助。我仍然很好奇,因为其他人找到了处理这个问题的最佳方法,所以我想听听任何反馈,或者其他插件的例子,这些插件已经“正确”了。

结束

相关推荐