未使用GET_TEMPLATE_PART或LOCATE_TEMPLATE加载模板

时间:2021-12-11 作者:Luigino

我在my\\u模板中有这个简单的模板。php文件:

<div class="popup_canvas_container">
    <p>This is a template I\'m gonna load</p>
</div>
我实现了这个函数来从自定义短代码加载模板:

public static function load_template($atts) {       
    function load_my_template() {
        ob_start();

        //if ( file_exists(TEMPLATE_MODULE_DIR . \'my-template.php\') ) {
        //  include_once( TEMPLATE_MODULE_DIR . \'my-template.php\' );
        //}


        get_template_part(\'my-template\');
        //locate_template( TEMPLATE_MODULE_DIR . \'my-template.php\', true, true );
        
        return ob_get_clean();
        
        //global $wpdb;                     
        //$current_user_id = $wpdb->get_var( "SELECT user_email FROM newk3_users WHERE user_login = \'xxxxxx\' " );       
        //$result = "<div class=\'box_external\'><p>$current_user_id</p></div>";
        //$result = "This is return";       
        
        //return $result;
        
    }
    add_shortcode( \'site_template\', \'load_my_template\' );
如果我使用include\\u一次,模板将加载到页面中,但如果我使用wordpress的功能,如get\\u template\\u part或locate\\u template,则不会加载模板。。。由于include\\u函数起作用,我想我可能错过了其他东西,即使我也把模板文件的完整路径放进去了。。。。你能给我指个方向吗?

提前感谢大家!CheersLuigi公司

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

来自您的评论:(格式简洁)

有趣的是我调试了TEMPLATE_MODULE_DIR . \'my-template.php\' 插件子文件夹中的路径是正确的

事实上,正如我在帖子中所说include_once 它装载得很好

因为你说它在plugin 子文件夹(位于wp-content/plugins), 正如我在评论中所说,如果get_template_part()locate_template() 未加载模板。

那是因为locate_template() (用于get_template_part()) 仅在中搜索活动主题文件夹中的模板wp-content/themeswp-includes/theme-compat 如果需要,那么对于插件文件夹等其他位置的模板,您需要使用requireinclude, 或他们的_“一次”;版本或者有load_template() 如果你想用它来代替。

尝试放置您的my-template.php 在活动主题文件夹中,添加;测试从活动主题文件夹加载;在模板中的某个位置,然后查看get_template_part() 和/或locate_template() 现在加载模板?

相关推荐

列出短码(DO_SHORTCODE)中的分类术语段

我想在我的短代码中列出分类术语。这是我获取术语列表的方式(用逗号分隔):<?php $terms = get_the_terms( $post->ID , array( \'shoptype\' ) ); $i = 1; foreach ( $terms as $term ) { $term_link = get_term_link( $ter