我制作了一个带有自定义帖子类型的插件postcard
.大多数postcards
都是私人的。
我想将注销的用户重定向到插件中的特定php文件中,而不是404.php
或achive.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
?
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;
}
}