如何在不更改模板文件的情况下将一些块添加到模板?

时间:2016-01-21 作者:Vlad

我正在使用付费儿童Wordpress主题,我无法更改它,因为在它更新后,我所有的更改都将丢失。我需要更改post模板(对于castom post类型,在我的示例中是single list.php)。如何在不更改模板文件的情况下向模板添加一些块?

2 个回复
SO网友:Howdy_McGee

我不确定你能不能——如果你不能把一个孩子变成一个孩子的主题(我很肯定你不能),而主主题没有提供任何挂钩——那么你唯一能做的就是hook into get_footer(); 但那可能太晚了。

SO网友:fuxia

Filter template_include, 使用输出缓冲捕获渲染的文件内容,并DOMDocument 来改变它。

未经测试的示例:

add_filter( \'template_include\', function( $template ) {

    // Bail out early.
    if ( \'the-file-you-want-to-filter\' !== $template )
        return $template;

    get_header();

    ob_start();

    include $template;

    $content = ob_get_clean();

    // See user notes on http://php.net/manual/en/domdocument.loadhtml.php
    $doc = new DOMDocument();
    $doc->loadHTML( \'<?xml encoding="UTF-8">\' . $content );

    // dirty fix
    foreach ($doc->childNodes as $item)
        if ($item->nodeType == XML_PI_NODE)
            $doc->removeChild($item); // remove hack
    $doc->encoding = \'UTF-8\'; // insert proper  

    /**
     * Edit the file content here.
     */
    echo $doc->saveHTML();  

    get_footer();

    return FALSE;
});

相关推荐

Updating modified templates

我想调整一些。php模板文件在我的WordPress主题中,我知道正确的过程是将相关文件复制到子主题文件夹中并在那里编辑文件,这样我的修改就不会在将来的主题更新中丢失。但这是否意味着我将无法从主题更新中获益,因为我将文件放在了我的子主题文件夹中?这可能不是一件好事,因为主题更新可能添加了一些有用的特性,甚至修复了我最初需要对代码进行调整的问题!这方面的常见解决方案是什么?有人推荐了一款Diff应用程序——这是人们常用的吗?