创建使用特定模板的页面

时间:2018-04-20 作者:Rick Hellewell

我需要以编程方式创建一个页面,该页面使用以编程方式定义的特定/自定义模板。页面和模板都是由我的插件创建/使用的。

插件文件包括一个页面模板。插件代码(按下按钮)将创建页面(“mycustompage”)(类似于此处的技术Add custom template page programmatically ).

但我需要指定该页面使用的模板。该页面必须使用my\\u plugin\\u文件夹/templates/mytemplate中的模板。php。模板不能位于当前主题文件夹结构中。

创建页面后,插件将打开一个新选项卡,其中包含www.example。com/mycustompage(假设插件代码创建了一个唯一的/未使用的页面名称)。

当我调用创建的页面(如www.example.com/mycustompage)时,如何指定编程创建的页面将使用的模板?并且,要使用的模板不在当前主题文件夹中。

Added

请注意,我通过使用循环输出帖子内容“手动”创建HTML代码。HTML代码为not 显示在WP页面上。因此,没有使用WP JS将表情符号HMTL字符转换为表情符号图形。

如果我要创建一个使用简单模板仅显示帖子的页面(该模板不使用wp\\u页眉/侧边栏/页脚等),然后显示该页面,则表情符号将在浏览器中显示为图形。如果我复制该页面(在浏览器中)并将其粘贴到Word中,则图形在Word中,因为它们位于浏览器页面上。

但是,我正在用PHP代码创建所有HTML(帖子内容)。我还没有找到一种将表情符号HTML代码转换为表情符号图形的好方法。

因此,我认为(而不是为整个页面创建HTML代码)使用一个简单的模板(由我通过编程创建的页面使用)将允许WP使用该页面(以及所有帖子内容),该页面将显示表情符号图形。但模板通常位于主题文件夹中,作为插件,我需要使用我的模板(存储在插件文件夹中)。(我认为我的插件将模板文件写入主题文件夹是不“礼貌的”。)

所以the question: 以编程方式创建一个页面,使用插件文件夹(而不是主题文件夹)中包含的模板文件。使用模板允许WP显示表情图形。然后我可以将生成的页面复制/粘贴到Word中,图形就会出现在那里。

2 个回复
最合适的回答,由SO网友:Rick Hellewell 整理而成

问题是如何使用不在主题文件夹中,但在插件文件夹中的模板。模板需要用于特定页面。是否需要答案并不重要。有必要;我该怎么做?

答案是使用template_include 过滤器(参见here) . 以下是我对答案的解释:

我正在开发的插件创建了一个页面。然后,该页面需要使用插件提供的模板。我可以这样做

创造一个全新的主题(太多的工作-过度);

将模板复制到主题文件夹(对主题不礼貌);

创建一个儿童主题(再次过度);

将代码放入函数中。php文件(编辑主题的function.php文件不礼貌或不好;在子主题中更好,但这不好);

设置页面元以按名称指定模板(但这需要主题文件夹中的模板);

或者更改页面使用的模板(因此产生了这个问题)。

我用于执行此操作的代码如下所示。我要使用的模板文件位于插件的templates文件夹中。我的插件以前创建过“我的自定义页面”页面。

// include our template
add_filter( \'template_include\', \'use_our_page_template\', 99 );

function use_our_page_template( $template ) {

    if ( is_page( \'My Custom Page\' )  ) {
        $new_template =  plugin_dir_path( __FILE__ ) . \'templates/mycustomtemplate.php\';
        return $new_template;
    }
return;
Theis_page() 函数可以使用页面的ID、标题或slug(请参阅docs). 我使用页面标题作为参数。

请注意,如果您编辑“我的自定义页面”,您将不会在编辑屏幕的模板字段中看到正在使用的模板名称。这并不困扰我,但可能是可以解决的。没关系;我的模板用于输出页面。

我把上面的代码放在插件的代码中。只要插件启用,过滤器就可用。是的,可能会对性能造成轻微影响,因为过滤器已为整个站点启用,但我可以接受。我可能会更改页面名称,使其完全唯一。

因此,我的解决方案解决了这个问题:如何设置页面以使用主题文件夹外的模板。其他答案虽然包含一些有用的信息,但没有回答原来的问题。

这是可行的。

(注:this question from 2010 向我指出了最终的解决方案。)

SO网友:Tom J Nowell

我将忽略您尝试的解决方案,并解决原始问题:

Emoji are converted into HTML, preventing them from showing when copy pasted into MS Word

这是因为脚本将页面上的所有表情都转换为SVG图标。为每个页面创建子页面,并使用专用模板来解决此问题完全没有必要。

如果查看页面的源代码,表情符号就在那里,完好无损,但会通过javascript转换为SVG图像:

enter image description here

enter image description here

enter image description here

在这里,我们看到它们被保存为表情符号:

enter image description here

在这里,它们在页面中是完整的来源:

enter image description here

所以真正的问题是,WP表情符号将表情符号复制到Word中,并将其转换为SVG图标,以便浏览器和操作系统上不支持表情符号的用户仍然可以看到它们。这将中断MS Word中的复制粘贴。

值得注意的是,它在其他地方没有相同的效果,例如,这里是崇高的文本:

enter image description here

谷歌浏览器:

enter image description here

解决方案:禁用WP表情符号脚本

您可以使用HTML类在表单字段中禁用该脚本:

如果您是处理表单的开发人员,您可能希望在输入字段和文本区域中禁用此行为。为此,可以将class属性与“wp exclude emoji”一起使用。

但对于一般内容,此代码段将实现以下功能:

remove_action(\'wp_head\', \'print_emoji_detection_script\', 7);
remove_action(\'wp_print_styles\', \'print_emoji_styles\');
还有一些插件可以为您执行此操作。最终的结果是表情符号不再被替换为图像:

enter image description here

现在,您应该能够将粘贴复制到Word而不会出现问题,并且不需要涉及其他模板和子页面的复杂设置

还有其他途径:

添加一个复制按钮,单击该按钮时,将从REST API中获取原始源代码并将其放入剪贴板。选择文本后,使用alt text使用修改后的wp表情符号脚本,该脚本仅在检测到用户系统无法呈现表情符号时才会转换。不管你做什么,这个用户都不会在Word中获得表情符号

结束

相关推荐

Custom templates folder

我创建了一个自定义文件夹(“/模板”),并将所有模板文件放在该文件夹中。而不是root(“/wp-content/themes/my-theme/”)。它工作得很好。我是否必须添加一些功能来指示“/模板/”文件夹作为我的模板文件夹?通常你把它们放在根上,对吗?现在一切正常,但我只是想知道是否有什么我必须做的。我找不到有关wordpress codex的任何信息。我刚刚安装了WPML,现在所有的模板页面都是404。我想知道它(自定义模板文件夹位置)是否会导致404页。因为吴宇森的商业页面显示良好。wc不在我