Code to add template to page

时间:2017-05-11 作者:geoB

插件创建一组页面和模板。必须有某种方法将模板分配给其中一个页面。我已尝试调整过滤器参考中显示的方法template_include 没有成功。

页面段塞为member-register, 模板文件名为member-content-template.php.

一些不起作用的事情包括:

  • locate_template(): 我怀疑,因为模板是由插件创建的,所以似乎只有搜索主题的函数找不到模板
  • is_page(): 如果给定页面标题的参数,slug或id将返回false

编辑:

由于我对WordPress没有多少经验,所以我会以较小的增量来查看结果。尝试包括以下内容:

$template = locate_template([\'member-content-template.php\']);
var_dump($template);die;
这导致string(0) ""或:

   $is = is_page(3350);
    var_dump($is);die;
这导致bool(false)这同样适用于is_page(\'member-register\')is_page(\'Register\')

如果以上任何一项产生了可接受的结果,我会按照过滤器引用中的建议构建回调。

编辑代码段:

rma。php(插件代码)

$page_definitions = array(
...
\'member-register\' => array(
    \'title\' => __(\'Register\', \'rma-member-auth\'),
    \'content\' => \'[custom_register_form]\', 
    \'class\' => \'Rma\\Pages\\Register\',
    \'function\' => \'createRegisterForm\',
    \'template\' => \'Rma\\Templates\\member-content-template.php\',
),
);
...
    $templater = new PageTemplater($templates);
    add_action(\'plugins_loaded\', array(\'Rma\\Templates\\PageTemplater\', \'get_instance\'));
    $pages = new PageLoader();
    $pages->pageCreator($page_definitions);
    $pages->shortcodeGenerator($page_definitions);
...
页面加载器:

...
public function pageCreator($page_definitions) {
    foreach ($page_definitions as $slug => $page) {
        // Check that the page doesn\'t exist already
        $query = new \\WP_Query(\'pagename=\' . $slug);
        if (!$query->have_posts()) {
            // Add the page using the data from the array above
            wp_insert_post(
                    array(
                        \'post_content\' => $page[\'content\'],
                        \'post_name\' => $slug,
                        \'post_title\' => $page[\'title\'],
                        \'post_status\' => \'publish\',
                        \'post_type\' => \'page\',
                        \'ping_status\' => \'closed\',
                        \'comment_status\' => \'closed\',
                        \'post_template\' => $page[\'template\'],
                    )
            );
        }
    }
}

2 个回复
最合适的回答,由SO网友:geoB 整理而成

正如我刚刚了解到的,在插件中创建的页面不被视为用于添加模板的页面。相反,我发现以下补充有效:

rma。php:

$id = get_page_by_title(\'Register\')->ID;
$pages->updateRegisterTemplate($id);
在PageLoader中:

public function updateRegisterTemplate($id) {
    $meta_key = \'_wp_page_template\';
    $meta_value = \'./member-content-template.php\';

    return update_post_meta($id, $meta_key, $meta_value)
}

SO网友:Frank P. Walentynowicz

locate_template 函数用于搜索当前主题的文件夹中的模板名称。如果模板位于主题的根文件夹中,请使用:

$template = locate_template( \'member-content-template.php\' );
否则,请在模板名称之前加上子文件夹名称(前面没有斜杠):

$template = locate_template( \'templates/member-content-template.php\' );
要加载模板(如果找到),请添加true 作为的第二个参数locate_template 功能:

$template = locate_template( \'member-content-template.php\', true );
Update: 要在插件中加载tempate,请使用过滤器“template\\u include”:

function my_template_loader_filter() {
    function my_template_loader( $template ) {
        $my_template = locate_template( \'member-content-template.php.php\' );
        if ( ( \'\' != $my_template ) && is_page( \'member-register\' ) )
            return $my_template ;
        }
        return $template;
    }
    add_filter( \'template_include\', \'my_template_loader\' );
}
add_action( \'after_setup_theme\', \'my_template_loader_filter\' );

结束

相关推荐