Я немного изменил ваш код в процессе, но это сработало для меня:
<?php
/**
* Plugin Name: MyPlugin Example
* Version: 1.0.1
**/
class MyPlugin {
function activate() {
global $wp_rewrite;
$this->flush_rewrite_rules();
}
// Took out the $wp_rewrite->rules replacement so the rewrite rules filter could handle this.
function create_rewrite_rules($rules) {
global $wp_rewrite;
$newRule = array('MyPlugin/(.+)' => 'index.php?MyPlugin='.$wp_rewrite->preg_index(1));
$newRules = $newRule + $rules;
return $newRules;
}
function add_query_vars($qvars) {
$qvars[] = 'MyPlugin';
return $qvars;
}
function flush_rewrite_rules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
function template_redirect_intercept() {
global $wp_query;
if ($wp_query->get('MyPlugin')) {
$this->pushoutput($wp_query->get('MyPlugin'));
exit;
}
}
function pushoutput($message) {
$this->output($message);
}
function output( $output ) {
header( 'Cache-Control: no-cache, must-revalidate' );
header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
// Commented to display in browser.
// header( 'Content-type: application/json' );
echo json_encode( $output );
}
}
$MyPluginCode = new MyPlugin();
register_activation_hook( __file__, array($MyPluginCode, 'activate') );
// Using a filter instead of an action to create the rewrite rules.
// Write rules -> Add query vars -> Recalculate rewrite rules
add_filter('rewrite_rules_array', array($MyPluginCode, 'create_rewrite_rules'));
add_filter('query_vars',array($MyPluginCode, 'add_query_vars'));
// Recalculates rewrite rules during admin init to save resourcees.
// Could probably run it once as long as it isn't going to change or check the
// $wp_rewrite rules to see if it's active.
add_filter('admin_init', array($MyPluginCode, 'flush_rewrite_rules'));
add_action( 'template_redirect', array($MyPluginCode, 'template_redirect_intercept') );
Я прокомментировал важные части, но в основном я переместил ваши хуки в use_filter
, а не add_action
. Я также переместил фильтры в том порядке, в котором они фактически используются в Wordpress. Казалось, что делать в то время.
Наконец, убедитесь, что ваши постоянные ссылки настроены на использование красивых URL. У меня была проблема, когда мой был установлен по умолчанию, из-за чего Wordpress игнорировал любые условия перезаписи, которые иначе пришлось бы анализировать. Перейдите на несколько симпатичных URL-адресов, и ваши условия обновятся.
Дайте мне знать, если это работает для вас. Надеюсь, это поможет.
Спасибо, Джо