WordPress:如何从插件添加页面模板而不会丢失$ this

时间:2017-05-30 20:46:16

标签: php wordpress templates

背景

我正在尝试从插件中添加页面模板。对于这个问题,我已将我的代码修改为一个测试插件,它有两个文件,PHP主插件文件和PHP模板文件。

WP-插件/测试插件/测试plugin.php

WP-插件/测试插件/模板/测试的template.php

这个插件有两个部分。首先,我点击template_include过滤器,然后返回模板文件的路径(test-template.php)。

接下来,我有Walker_Page的新扩展名,在此示例中名为Walker_Page_New。在文件中,它是Walker_Page的单词副本。

当前代码

测试plugin.php

<?php

/**
 * Plugin Name: Test Plugin
 * Version: 1.0
 * Author: Andy Mercer
 * Author URI: http://www.andymercer.net
 * License: GPL2
 */ 

add_filter( 'template_include', 'test_get_template' );

function test_get_template( $template ) {

    $template_path = plugin_dir_path( __FILE__ ) . 'templates/test-template.php';

    if ( file_exists( $template_path ) ) {

        $template = $template_path;

    }

    return $template;

}


class Walker_Page_New extends Walker_Page {

    // THE CODE IN HERE IS AN EXACT COPY OF WALKER_PAGE

    // I AM NOT ENTERING IT ALL IN THIS QUESTION BECAUSE IT'S A COUPLE HUNDRED LINES OF CODE

}

测试的template.php

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        ...head stuff...
    </head>
    <body>
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div>
            <?php $ancestors = get_ancestors( get_the_ID(), 'page' );
            wp_list_pages([
                'title_li' => '',
                'sort_column' => 'menu_order',
                'child_of' => $ancestors[0],
                'depth' => 2,
                'walker' => 'Walker_Page_New',
            ]); ?>
        </div>
        <div>
            <?php the_title(); ?>
            <?php the_content() ?>
        </div>
        <?php endwhile; endif; ?>
        <?php wp_footer(); ?>
    </body>
</html>

问题

当我加载页面时,我只收到此错误:

  

致命错误:未捕获错误:当不在C中的对象上下文中时使用$ this:... \ wp-includes \ class-wp-walker.php:199

触发此错误的是使用自定义Walker调用wp_list_pages()。当我删除沃克时,我很好,一切都按预期工作。

研究

从环顾四周来看,我发现的唯一具体提及是半关联的:https://github.com/Automattic/amp-wp/issues/412#issuecomment-240871878,其中声明使用template_include会导致此问题:

  

e.g。我们将不再在模板中使用$ this上下文

问题

预计使用template_include会破坏内容吗?我应该使用template_redirect吗?

0 个答案:

没有答案