我有一个客户,有一个全面充实和功能完善的WordPress网站,主题是儿童。我正在创建一个插件,让他们从未登录的用户那里获取表单数据,并将其发送到外部API。
起初,我认为我应该将表单放在一个短代码中,然后将该短代码粘贴到页面中,这与创建“商店”页面的电子商务插件没有什么不同。
客户希望此表单的样式与网站的其他部分完全不同。就像一个次要主题。我希望整个项目捆绑在一个插件中,这样以后对主主题的更改对插件没有影响。
我找到了一些通过检查来破解WordPress进程的方法$_SERVER[\'REQUEST_URI\']
在a中add_action(\'init\',\'foo\')
. 使用load_template()
, 但在创建一个漂亮的弗兰肯斯坦怪兽页面后,也会加载主题页眉/正文/页脚。
我希望这里有人知道一种更稳定的方法,可以通过几个URL的插件来重载主题。
如果您需要查看更多代码,请询问。我不知道有什么功能会有帮助。
EDIT: 我的解决方案主要取决于认识到你需要返回false
之后load_template()
否则WordPress将继续从主题加载模板。
最合适的回答,由SO网友:Howdy_McGee 整理而成
似乎没有任何好的钩子来切换页眉或页脚模板。由于需要更改主题的页眉和页脚,因此最好在子主题中创建页面模板。类似这样:
<?PHP
/**
* Template Name: Plugin XYZ
* plugin-xyz.php
*/
// Will look for a header-plugin-xyz.php file.
get_header( \'plugin-xyz\' );
// Arbitrary action hook for your plugin.
do_action( \'plugin_xyz_before_content\' );
if( have_content() ) {
while( have_posts() ) {
the_post();
the_title( \'<h1 class="entry-title">\', \'</h1>\' );
the_content();
}
}
// Arbitrary action hook for your plugin.
do_action( \'plugin_xyz_after_content\' );
// Will look for a footer-plugin-xyz.php file.
get_footer( \'plugin-xyz\' );
创建和调用
header-plugin-xyz.php
和
footer-plugin-xyz.php
在您的子主题中,您可以加载与主题相关的元素和样式,同时使它们与网站的其他部分不同。通过将其设置为页面模板,可以将其分配给特定页面,并加载页面资产,如内容或相关元数据。您可以在整个模板中添加钩子,以便插件钩住、修改或注入更多模板或内容。
另一种方法是,保留插件中包含的所有内容,即创建模板而不调用get_header()
和get_footer()
. 然后需要创建自己的页眉和页脚元素(以便wp_head()
和wp_footer()
拨打电话)。您可以创建Endpoint (Make Tutorial) 和使用load_template
hook 加载自定义端点时调用自定义模板。
如果你有一个子主题,而这是一个一次性插件,那么我建议你使用第一个。如果您想将此功能扩展到其他主题,那么我建议不要尝试覆盖主题页眉和页脚,因为没有好的挂钩来管理这些主题。