如何在php中自定义404重定向的文件路径?

时间:2019-08-23 作者:J.BizMai

我制作了一个带有自定义帖子类型的插件postcard.大多数postcards 都是私人的。

我想将注销的用户重定向到插件中的特定php文件中,而不是404.phpachive.php.

我试过了template_redirect 这样的动作:

add_action( "template_redirect", array( "MyClass", "is_redirection" ) );

Class MyClass{

    public static function is_redirection(){
        if( is_404() ) {
            global $post_type;
            if( $post_type === "postcard" ){
                $templates_dir = get_current_plugin_templates_dir_path();
                $page404 = $templates_dir . "/404-" . $post_type . ".php";
                if ( file_exists( $page404 ) ) {
                   wp_redirect( $page404 );
                   exit;
                }
            }
        }
    }  
}
我的问题是$page404 是文件路径,而不是url,因此。。。我怎样才能不使用.htaccess?

1 个回复
SO网友:Pat J

这应该适用于您,使用plugins_url():

...
// Assumes that your templates are in a subdirectory called \'templates\' in your plugin. 
// Adjust accordingly.
$templates_dir = plugins_url( \'templates\', __FILE__ );
$page_404      = $templates_dir . \'/404-\' . $post_type . \'.php\' );
...

Update: template_include

如果您想加载WordPress,最好使用template_include 滤器

add_filter( \'template_include\', array( \'MyClass\', \'404_template\' );
class MyClass {
    function 404_template( $template ) {
        if ( is_404() ) {
            global $post_type;
            $my_template = plugins_url( \'templates/404-\' . $post_type . \'.php\' , __FILE__ );
            if ( file_exists( $my_template ) ) {
                $template = $my_template;
            }
        }
        return $template;
    }
}

相关推荐