索引模板是否始终跟在Page_Template()模板之后?

时间:2018-02-10 作者:James

我正在设置路由但索引的页面模板。php总是遵循自定义模板,是不是因为它是“include\\uux”?感觉应该是“set\\uuu”或“load\\uu”。。。我想用我的模板替换输出,而不仅仅是在输出中包含我的模板。

add_action(\'template_include\', [$self, \'load_route_template\']);
public function load_route_template($template)
    {
        if (!$this->matched_route instanceof Route || !$this->matched_route->has_template()) {
            return $template;
        }

        // No file found yet
        $located = false;

        // Continue if template is empty
        if ( empty( $this->matched_route->get_template() ) )
            return;

        // Check child theme first
        if ( file_exists( trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
        // Check parent theme next
        } elseif ( file_exists( trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
        // check plugin directory
        } elseif ( file_exists( plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\';
        }

        if ( ! empty( $located ) )
            load_template( $located );

        if (!empty($route_template))
            $template = $located;

        return $template;
    }
我使用的代码基于this tutorial, 路由工作得很好,当我点击某些路由时会加载模板,但索引除外。php总是遵循它。

1 个回复
SO网友:obiPlabon

template_include 是一个filter hook 所以你应该使用add_filter() 而不是add_action(), 这打破了这里的语义。虽然这两个函数在内部做相同的事情。

试试下面的代码,我还没有测试过,但应该可以。简化并删除了一些代码。

add_filter(\'template_include\', [$self, \'load_route_template\']);
public function load_route_template($template)
    {
        if (!$this->matched_route instanceof Route || !$this->matched_route->has_template() || empty( $this->matched_route->get_template() ) ) {
            return $template;
        }

        // No file found yet
        $located = false;

        // Check child theme first
        if ( file_exists( trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
        // Check parent theme next
        } elseif ( file_exists( trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
        // check plugin directory
        } elseif ( file_exists( plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\' ) ) {
            $located = plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\';
        }

        if ( $located ) {
            $template = $located;
        }

        return $template;
    }

结束

相关推荐

Taxonomy Templates

我不太明白如何链接到我的分类法模板。我需要做一个临时页面并从那里查询我的条款吗?我当前正在使用分类层次结构:Taxonomy$labels = array( \'name\' => __( \'Product Categories\' ), \'singular_name\' => __( \'Product Category\' ), \'search_items\' =>