我正在尝试创建一个wordpress插件,用于从自定义表格中提取数据(例如产品)
我希望有任何以"产品"开头的网址由插件处理,所以我有:
add_action('parse_request', 'my_url_handler');
function my_url_handler()
{
// Manually parse the URL request
if(!empty($_SERVER['REQUEST_URI']))
{
$urlvars = explode('/', $_SERVER['REQUEST_URI']);
}
if(isset($urlvars[1]) && $urlvars[1] == 'products')
{
$pluginPath = dirname(__FILE__);
require_once($pluginPath.'/templates/products.php');
}
}
在$ pluginPath。' /templates/products.php我有:
<?php
get_header(); ?>
My content
<?php get_sidebar(); ?>
<?php get_footer(); ?>
然而,当呈现页面时,WP似乎插入404代码(以及products.php)并且管理菜单栏未被呈现
我需要知道的事情:
任何指针都会很棒,因为谷歌链接用尽了。
答案 0 :(得分:1)
您不会以最佳方式解决这个问题。 Wordpress具有解释URL重写的功能。你正在做的事情现在让Wordpress知道请求被处理而不是404.以下是你应该做的事情:
add_action( 'init', 'yourplugin_rewrite_init' );
function yourplugin_rewrite_init() {
add_rewrite_rule(
'products/([0-9]+)/?$', // I assume your product ID is numeric only, change the regex to suit.
'index.php?pagename=products&product_id=$matches[1]',
'top'
);
}
add_filter( 'query_vars', 'yourplugin_add_query_vars' );
function yourplugin_add_query_vars( $query_vars ) {
$query_vars[] = 'product_id';
return $query_vars;
}
add_action( 'template_redirect', 'yourplugin_rewrite_templates' );
function yourplugin_rewrite_templates() {
if ( get_query_var( 'product_id' ) ) {
add_filter( 'template_include', function() {
return plugin_dir_path( __FILE__ ) . '/products.php';
});
}
}