我需要创建一个前端页面(和子页面),该页面将显示保存在数据库中的自定义数据,但不是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)我如何做到这一点,有什么想法吗?
这是分析仪的结果:
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
文件并添加您自己的后端代码。