在插件中编程设置页面模板

时间:2019-01-04 作者:Prusakov

任务:我使用插件创建了一个页面,该页面必须在页面创建中设置特定的页面模板。除了设置页面模板之外,一切都正常工作。我现在已经手动将页面模板文件移动到主题目录中,并手动设置页面模板,但这对我不好。页面模板文件与插件主文件位于同一目录中
问题:如何制作我的插件来设置页面模板?我错过了什么?

以编程方式创建页面的代码:

    <?php
function create_namnam_login_page($post_name) {
    global $wpdb;
    if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = \'" . $post_name . "\'", \'ARRAY_A\')) {
        return true;
    } else {
        return false;
    }
}

$postarr = array(
        \'post_author\'   => 1,
        \'post_title\'    => \'NamNam Login\',
        \'post_status\'   => \'publish\',
        \'post_type\'     => \'page\',
        \'post_slug\'     => \'namnam-login\',
        \'page_template\' => \'namnam-login.php\',
    );

if (the_slug_exists(\'namnam-login\')) {
    return false;
}
else {
    $namnam_login = wp_insert_post( $postarr, $wp_error = false );
    update_option( \'namnamloginpage\', $namnam_login ); 
}
?>
插件激活挂钩:

<?php
    function namnam_create_login_page() {

        include_once dirname( __FILE__ ) . \'/admin-login.php\';

        create_namnam_login_page($post_name);
        flush_rewrite_rules();
    }
    register_activation_hook( __FILE__, \'namnam_create_login_page\' );

    function namnam_delete_login_page() {
        $the_page_id = get_option(\'namnamloginpage\');
        if( $the_page_id ) {
        wp_delete_post( $the_page_id, $force_delete = true );
        }

        flush_rewrite_rules();
    }
    register_deactivation_hook( __FILE__, \'namnam_delete_login_page\' );
    ?>

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

您可以使用page_template 筛选以从插件目录加载页面模板:

function wpd_plugin_page_template( $page_template ){
    if ( is_page( \'namnam-login\' ) ) {
        $page_template = dirname( __FILE__ ) . \'/namnam-login.php\';
    }
    return $page_template;
}
add_filter( \'page_template\', \'wpd_plugin_page_template\' );

相关推荐