Wordpress插件投掷404

时间:2016-04-12 20:38:18

标签: wordpress

我正在尝试创建一个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)并且管理菜单栏未被呈现

我需要知道的事情:

  1. wordpress如何检测404 - 我是否需要设置一些东西告诉它不要扔掉它?
  2. 为什么管理栏没有显示 - 我从搜索中看到这通常是由于插件 - 但不确定如何开始调试......
  3. 任何指针都会很棒,因为谷歌链接用尽了。

1 个答案:

答案 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';
        });
    }
}