Skip to content

Instantly share code, notes, and snippets.

@yousan
Forked from miya0001/class-addrewriterules.php
Created September 28, 2015 09:40
Show Gist options
  • Save yousan/74efaa97a6418a337854 to your computer and use it in GitHub Desktop.
Save yousan/74efaa97a6418a337854 to your computer and use it in GitHub Desktop.
WPに任意のURLを追加するためのクラス
<?php
if (!class_exists('WP_AddRewriteRules')):
class WP_AddRewriteRules{
private $rule = null;
private $query = null;
private $callback = null;
function __construct($rule, $query, $callback)
{
$this->rule = $rule;
$this->query = $query;
$this->callback = $callback;
add_filter('query_vars', array(&$this, 'query_vars'));
add_action(
'generate_rewrite_rules',
array(&$this, 'generate_rewrite_rules')
);
add_action('wp', array(&$this, 'wp'));
}
public function generate_rewrite_rules($wp_rewrite)
{
$new_rules[$this->rule] = $wp_rewrite->index . '?' . (
strpos($this->query, '=') === FALSE
? $this->query . '=1'
: $this->query
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
private function parse_query($query)
{
$query = explode('&', $query);
$query = explode(
'=',
is_array($query) && isset($query[0]) ? $query[0] : $query
);
return (is_array($query) && isset($query[0]) ? $query[0] : $query);
}
public function query_vars($vars)
{
$vars[] = $this->parse_query($this->query);
return $vars;
}
public function wp()
{
if (get_query_var($this->parse_query($this->query))) {
call_user_func($this->callback);
}
}
}
endif;
// eol
<?php
// 例
// プラグイン有効化時にリライトルールをクリアする。
register_activation_hook(__FILE__, 'flush_rewrite_rules');
new WP_AddRewriteRules(
'mystyle.css$',
'mystyle',
'callback_function'
);
// 指定されたURLでアクセスがあった際に実行されるコールバック
function callback_function()
{
header('Content-type: text/css; charset=UTF-8');
echo 'body {background-color: #ff0000}';
exit; // exitがないと続けてwp本体の処理が行われてしまう。
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment