Плагин Wordpress для создания виртуальной страницы с использованием правил перезаписи - PullRequest
0 голосов
/ 14 марта 2019

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

Вот мой код:

add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
$wp_rewrite->rules = array_merge(
    ['my-custom-url/?$' => 'index.php?custom=1'],
    $wp_rewrite->rules
);
} );

add_filter( 'query_vars', function( $query_vars ) {
$query_vars[] = 'custom';
return $query_vars;
} );

add_action( 'template_redirect', function() {
$custom = intval( get_query_var( 'custom' ) );
if ( $custom ) {
    include plugin_dir_path( __FILE__ ) . 'templates/states.php';
    exit();
 }
} );

В плагине у меня есть templates / states.php и в этом файле:

<?php
$state = get_query_var( 'custom' );

echo $state;
?>

Когда я захожу на localhost / my-custom-url / somevariable, я получаю страницу, не найденную в Wordpress. Я пытался очистить мои постоянные ссылки.

1 Ответ

0 голосов
/ 14 марта 2019

Как я уже сказал в комментариях

Я никогда не использовал generate_rewrite_rule

Документация на него тоже довольно слабая.Но этот ключ выглядит точно так же, как я ожидал бы регулярное выражение.И это имеет смысл, поскольку именно так работают настоящие Mod Rewrite и Htaccess.

add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
  $wp_rewrite->rules = array_merge(
    ['my-custom-url/?$' => 'index.php?custom=1'],
    $wp_rewrite->rules
  );
} );

Так что здесь $ соответствует концу строки, это означает, что ваш URL должен заканчиваться на my-custom-url знакомнеобязательно / из-за ?.

Когда я захожу на localhost / my-custom-url / somevariable, я получаю страницу, не найденную

Это Не Удивительно, поскольку ваш URL не заканчивается таким образом, чтобы соответствовать этому шаблону.

Проверьте это сами!

Так что вы можете просто удалить $ вы можете или не можете оставить необязательный параметр /.

add_filter( 'generate_rewrite_rules', function ( $wp_rewrite ) {
  $wp_rewrite->rules = array_merge(
    ['my-custom-url/?' => 'index.php?custom=1'],
    $wp_rewrite->rules
  );
} );

Одно замечание: это совпадение в любом месте URL

Проверьте это

Надеюсь, что это работает.

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