为什么WooCommerce模板使用挂钩而不是GET_TEMPLATE_PART

时间:2015-11-29 作者:Djave

为什么Woocommerce使用挂钩而不包括模板部件?

我正在创建我的第一个Woocommerce主题,似乎停用当前的钩子,然后重新编写它们来更改部分的顺序真是太过分了。对我来说,只需使用get_template_part().

我错过了什么/按他们的方式做有什么好处?!

2 个回复
SO网友:Pieter Goosen

我不熟悉Woocommerce,但简而言之,get_template_part() 只在父主题和子主题中查找模板部分,而不在插件中查找。

如果你看看源代码,get_template_part() 使用locate_template 其中包含以下源代码(这是搜索实际模板部分的地方)

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = \'\';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . \'/\' . $template_name)) {
            $located = STYLESHEETPATH . \'/\' . $template_name;
            break;
        } elseif ( file_exists(TEMPLATEPATH . \'/\' . $template_name) ) {
            $located = TEMPLATEPATH . \'/\' . $template_name;
            break;
        }
    }

    if ( $load && \'\' != $located )
        load_template( $located, $require_once );

    return $located;
}
正如你所见,locate_template 仅在父主题和子主题中查找模板

这就是为什么你不能使用get_template_part() 或者使用它将模板部分从插件调用到主题中。

根据@MarkKaplun的评论进行编辑get_template_part() 在检索模板部件方面,Mark还指出了关于Woocommerce使用的一个有效观点

我想换一种说法,因为WC是一个插件,它不能对使用它的主题以及它们有哪些部分有任何假设,而不限制它的采用,WC是用来处理任何主题的。

SO网友:tao

/**
 * @since 1.2.0
 *
 */
function add_action(...) {
    /* ... */
}

/**
 * @since 3.0.0
 *
 */
function get_template_part(...) {
    /* ... */
}
WooCommerce于2011年9月推出。然而,它不是一天内编码的,他们肯定是几个月前开始的。

当时,WP刚刚发布了3.0(顺便说一句,大更新),更新WP、主题或插件的工作没有现在那么顺利。

此外add_action()add_filter() 是WP概念的基础。你可以肯定,它们永远不会过时。当您编写像WooCommerce这样大的代码时,这是一种方法。

您可能知道,WC提供templating system.

相关推荐