混合和匹配-WordPress插件中的自定义模板

时间:2021-02-24 作者:Abe

我有一个客户,有一个全面充实和功能完善的WordPress网站,主题是儿童。我正在创建一个插件,让他们从未登录的用户那里获取表单数据,并将其发送到外部API。

起初,我认为我应该将表单放在一个短代码中,然后将该短代码粘贴到页面中,这与创建“商店”页面的电子商务插件没有什么不同。

客户希望此表单的样式与网站的其他部分完全不同。就像一个次要主题。我希望整个项目捆绑在一个插件中,这样以后对主主题的更改对插件没有影响。

我找到了一些通过检查来破解WordPress进程的方法$_SERVER[\'REQUEST_URI\'] 在a中add_action(\'init\',\'foo\'). 使用load_template(), 但在创建一个漂亮的弗兰肯斯坦怪兽页面后,也会加载主题页眉/正文/页脚。

我希望这里有人知道一种更稳定的方法,可以通过几个URL的插件来重载主题。

如果您需要查看更多代码,请询问。我不知道有什么功能会有帮助。

EDIT: 我的解决方案主要取决于认识到你需要返回false 之后load_template() 否则WordPress将继续从主题加载模板。

1 个回复
最合适的回答,由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.phpfooter-plugin-xyz.php 在您的子主题中,您可以加载与主题相关的元素和样式,同时使它们与网站的其他部分不同。通过将其设置为页面模板,可以将其分配给特定页面,并加载页面资产,如内容或相关元数据。您可以在整个模板中添加钩子,以便插件钩住、修改或注入更多模板或内容。

另一种方法是,保留插件中包含的所有内容,即创建模板而不调用get_header()get_footer(). 然后需要创建自己的页眉和页脚元素(以便wp_head()wp_footer() 拨打电话)。您可以创建Endpoint (Make Tutorial) 和使用load_template hook 加载自定义端点时调用自定义模板。

如果你有一个子主题,而这是一个一次性插件,那么我建议你使用第一个。如果您想将此功能扩展到其他主题,那么我建议不要尝试覆盖主题页眉和页脚,因为没有好的挂钩来管理这些主题。

相关推荐