没有物理页面的插件的自定义前端页面?

时间:2017-04-13 作者:Aravona

我需要创建一个前端页面(和子页面),该页面将显示保存在数据库中的自定义数据,但不是wordpress的一部分,它本身不是帖子或页面,而是API调用的数据。我不想使用短代码,因为需要子页面。

我已经查看了以下内容,但似乎无法按要求进行操作:Dynamic URL, not a physical page within the database

例如,我需要的是site.com/mypage/ 但我不希望“mypage”存在于后端。

我通过以下方式实现了这一目标:

public function mypage_rewrite_ext() {
    global $wp_rewrite;
    $plugin_url = plugins_url( \'mypage.php\', __FILE__ );
    $plugin_url = substr( $plugin_url, strlen( home_url() ) + 1 );
    // The pattern is prefixed with \'^\'
    // The substitution is prefixed with the "home root", at least a \'/\'
    // This is equivalent to appending it to `non_wp_rules`
    $wp_rewrite->add_external_rule( \'mypage$\', $plugin_url );
}
但我需要我的页面仍然在WordPress中,因为我需要使用页眉和页脚。

我尝试了上述链接问题中的以下内容,但这只是重定向到主页(即使在重新保存永久链接之后):

public function add_query_vars( $query_vars )
{
    $query_vars[] = \'test\';
    return $query_vars;
}

public function add_endpoint()
{
    add_rewrite_rule(\'^mypage/?\', \'index.php?__test=1\', \'top\');
    flush_rewrite_rules(false); //// <---------- REMOVE THIS WHEN DONE
}

public function sniff_requests($wp_query)
{
    global $wp;

    if(isset($wp->query_vars[ \'__test\' ])) {
        add_filter(\'template_include\', function ($original_template) {

            // change the default template to a google map template
            return plugin_dir_path( __FILE__ ) . \'mypage.php\';
        });
    }
}
关于1)我做错了什么和/或2)我如何做到这一点,有什么想法吗?

这是分析仪的结果:enter image description here

1 个回复
SO网友:Tahi Reu

"What I need is to have for example site.com/mypage/ but I do not want \'mypage\' to exist in the backend."

虽然有点晚了,但也许其他人也需要这样做:

Step 1
创建/templates/ 插件中的文件夹,并创建custom.php 文件,其中包含用于测试目的的临时内容,例如

<?php 
echo "Hi";
Step 2
将此代码添加到插件中:

add_filter( \'generate_rewrite_rules\', function ( $wp_rewrite ){
    $wp_rewrite->rules = array_merge(
        [\'mypage/?$\' => \'index.php?custom=1\'],
        $wp_rewrite->rules
    );
} );
add_filter( \'query_vars\', function( $query_vars ){
    $query_vars[] = \'custom\';
    return $query_vars;
} );
add_action( \'template_redirect\', function(){
    $custom = intval( get_query_var( \'custom\' ) );
    if ( $custom ) {
        include plugin_dir_path( __FILE__ ) . \'templates/custom.php\';
        die;
    }
} );
Please note 那个plugin_dir_path( __FILE__ ) 可能不适合您的情况,具体取决于您将在何处添加此代码。

Step 3
转到WP admin->;设置->;永久链接并重新保存,以刷新/重新创建永久链接。

Step 4
尝试访问yoursite.com/mypage.
清除浏览器缓存/历史记录,或者甚至尝试隐姓埋名/其他浏览器。

Step 5
从中删除测试代码custom.php 文件并添加您自己的后端代码。

相关推荐