Пользовательское правило перезаписи Wordpress нарушает нормальный просмотр сообщений

avatar
ZedBee
9 августа 2021 в 05:59
35
1
0

Я пытаюсь добавить пользовательское правило перезаписи в wordpress, используя API перезаписи через настраиваемый плагин. К сожалению, после активации плагина я больше не могу просматривать/просматривать обычные сообщения. Вот код моего плагина

<?php
/**
 * Plugin Name: URL Rewrite Test
 */
add_action('init', 'z_add_rewrite_rules');

function z_add_rewrite_rules(){
    add_rewrite_rule('^ztest/([a-z0-9-]+)[/]?$','index.php?ztest=$matches[1]','top');
}

add_filter('query_vars','z_set_query_vars');

function z_set_query_vars(){
    $query_vars[] = 'ztest';
    return $query_vars;
}

add_filter('template_include','z_include_template');

function z_include_template(){
    if(get_query_var('ztest')){
        //path to template file
        $new_template = plugin_dir_path(__FILE__).'/template.php';
        if(file_exists($new_template)){
            $template = $new_template;
        }
    }    
    return $template;
}

?>

template.php

<h1>Ztest</h1>

Когда я пытаюсь просмотреть localhost:81/wordpress572/hello-world/ , все, что я вижу, это пустая страница при просмотре localhost:81/wordpress572/ztest/asdf/, я могу увидеть страницу с Ztest h1. Я могу просматривать обычные сообщения после деактивации плагина.

Примечание. В настройках постоянных ссылок я установил постоянные ссылки на Имя публикации.

Источник

Ответы (1)

avatar
ZedBee
12 августа 2021 в 13:26
0

Следующая модификация моего кода устранила проблему, но я не совсем уверен, почему для этого URL-адреса вообще вызывался template_include.

function z_include_template($original_template){
    if(get_query_var('ztest')){
        //path to template file
        $new_template = plugin_dir_path(__FILE__).'/template.php';
        if(file_exists($new_template)){
            $template = $new_template;
        }
    } else {
        $template = $original_template;
    }    
    return $template;
}