WordPress переписать URL для доступа к странице плагина - PullRequest
0 голосов
/ 04 сентября 2011

Привет! Я пытаюсь получить доступ к своему плагину по обычному URL, но не могу перенаправить плагин, просто появляется страница 404, которая не найдена, тогда как я хочу, чтобы вместо этого вызывался page.php.Мой код плагина ниже (активируйте и деактивируйте функции плагина):

register_activation_hook(__FILE__,'activate');
register_deactivation_hook(__FILE__,'deactivate');

function setRewriteRules()
{
    add_rewrite_rule( 'plugin-url/$', '/wp-content/plugins/my-plugin/page.php', 'top' );
}

function activate() 
{       
    setRewriteRules();

    global $wp_rewrite;
    $wp_rewrite->flush_rules(true);  

}

function deactivate()
{
    global $wp_rewrite;
    $wp_rewrite->flush_rules(true);  
}

Есть идеи, что я делаю не так?

Заранее спасибо,

Крис

Ответы [ 2 ]

2 голосов
/ 04 сентября 2011

Во-первых, указывать путь таким образом - плохая идея, потому что если по какой-либо причине что-либо из этого изменится, ваш плагин / тема разрушится.
Ozh делает отличное предложение в разделе Твердо закодированные пути , насколько это возможно ...

Во-вторых, вам, скорее всего, будет лучше использовать * query_vars *. Посмотрите на http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/ и, возможно, даже http://planetozh.com/blog/2011/01/pretty-login-url-a-simple-rewrite-api-plugin-example/, чтобы найти примеры того, как это сделать.

Также ознакомьтесь с классом WP_Rewrite , поскольку он содержит наилучшую информацию об обработке перезаписи URL в WordPress.

В-третьих, вам нужно подключить вашу функцию setRewriteRules() к ловушке init , поскольку при первом сбросе правил ваши правила будут удалены.

Итак, ваш код будет выглядеть примерно так (без каких-либо других исправлений):

register_activation_hook(__FILE__,'activate');
register_deactivation_hook(__FILE__,'deactivate');
add_action('init', 'setRewriteRules');

function setRewriteRules()
{
    add_rewrite_rule( 'plugin-url/$', '/wp-content/plugins/my-plugin/page.php', 'top' );
}

function activate() 
{       
    setRewriteRules();

    global $wp_rewrite;
    $wp_rewrite->flush_rules(true);  

}

function deactivate()
{
    global $wp_rewrite;
    $wp_rewrite->flush_rules(true);  
}



Перезапись правила очистки

Вот несколько советов по сбросу правил перезаписи ...

  • Правила перезаписи автоматически сбрасываются при каждом посещении Настройки> Постоянная ссылка или при каждом внесении и сохранении изменений в области администратора.
  • Добавление add_action('admin_init', 'deactivate'); также может быть полезным, поэтому они сбрасываются при каждой загрузке страницы администратора.
1 голос
/ 04 сентября 2011

Правила перезаписи, которые не перенаправляются в файл Wordpress index.php, записываются в файл .htaccess. Я не думаю, что они когда-либо хранятся в базе данных. Итак, если посмотреть на ваш код, если ваш файл .htaccess недоступен для записи, когда плагин активирован, то ваше правило перезаписи никогда не добавляется.


Как писал Amereservant, вам нужно добавить правило перезаписи в действие init (или, возможно, generate_rewrite_rules), так как в противном случае оно будет удалено при каждом сбросе правил (поскольку, как описано, они не сохраняются в базе данных). ).

...