добавить rewrite_rules в пользовательский плагин WordPress - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь short url моей привычной страницы, что в my-pugin

, когда я использую свою пользовательскую страницу, я буду ссылаться как ниже

http://localhost/wordpress/wp-content/plugins/my-plugin/testurl.php

, но я хочу это

http://localhost/wordpress/testurl

я пишу этот код в своем плагине

function create_rewrite_rules($rules) {
        //print_r($rules);
        global $wp_rewrite;
        $newRule = array('/testurl' => 'wp-content/plugins/my-plugin/testurl.php');
        //echo $newRule;
        $newRules = $newRule + $rules;
        //$newRules = $newRule;
        // echo "<pre>";
        // print_r($newRules);
        return $newRules;
    }

    function flush_rewrite_rules() {
        //echo 1;
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

if(class_exists('MyPlugin'))
    $myPlugin = new MyPlugin();

add_filter('rewrite_rules_array', array($myPlugin, 'create_rewrite_rules'));
add_filter('init', array($myPlugin, 'flush_rewrite_rules'));

но это не поможет.

1 Ответ

0 голосов
/ 04 декабря 2018

Есть несколько вещей, на которые вы должны обратить внимание:

  • Вы должны сбрасывать правила перезаписи только при активации / деактивации плагина, а не при инициализации, чтобы предотвратить проблемы с производительностью.
  • Первый параметр rewrite_rule должен быть регулярным выражением.
  • Хук init - это действие, а не фильтр.

Ниже работает код плагина:

<?php
/*
Plugin Name: Rewrite test
*/

function custom_rewrite_basic() {
    add_rewrite_rule('^testurl?', 'wp-content/plugins/my-plugin/testurl.php', 'top');
}

register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
register_activation_hook( __FILE__, 'myplugin_flush_rewrites' );
function myplugin_flush_rewrites() {
    custom_rewrite_basic();
    flush_rewrite_rules();
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...