WordPress でカテゴリのリンクを標準以外に変更する方法です。
まぁ、それ専用のプラグインとかも探せば有ると思うんですが…
http://example.com/?cid=xx 形式に変更する
例えば、カテゴリのリンクを http://example.com/?cid=xx とかって形式でも表示できるようにするには、以下のようにして parse_query フィルタを使うと良いです。
# functions.php とかに追加してやってください。
class add_category_link_to_different_link { function __construct(){ add_filter('query_vars', array(&$this, 'add_query_vars')); add_action('parse_query', array(&$this, 'parse_query')); } public function add_query_vars($qvars) { $qvars[] = 'cid'; return $qvars; } public function parse_query($query) { $cat_id = (int) $query->query_vars['cid']; if ( !(empty($cat_id) || $cat_id === 0) ) { $url = get_category_link($cat_id); if ( !empty($url) && $url !== FALSE ) { $query->query_vars["cat"] = $cat_id; $query->is_404 = false; } else { $query->set_404(); } } return $query; } } new add_category_link_to_different_link;
http://example.com/cid/xx 形式に変更する
カテゴリのリンクを http://example.com/cid/xx って形式に変更したい場合は、以下のようにして rewrite_rules を変更する必要があります。
class add_rewrite_rules{ private $rule = null; private $query_var = null; function __construct($rule, $query_var) { $this->rule = $rule; $this->query_var = $query_var; add_filter('rewrite_rules_array', array(&$this, 'rewrite_rules_array')); add_action('init', array(&$this, 'init')); } public function init() { global $wp_rewrite; $rules = $wp_rewrite->wp_rewrite_rules(); if (!isset($rules[$this->rule])) { $wp_rewrite->flush_rules(); } } public function rewrite_rules_array($rules) { global $wp_rewrite; $new_rules[$this->rule] = $this->query_var; $rules = array_merge($new_rules, $rules); return $rules; } } global $wp_rewrite; new add_rewrite_rules('^cid\/([0-9]+)$', $wp_rewrite->index . '?cat=$matches[1]');
via. firegoby » Blog Archive » WordPressのプラグインで任意のURLのページを追加する
get_category_link() テンプレートタグが返すリンクを変更する
ただし、これだけだとテンプレートタグの <?php get_category_link() >
が返すリンクは変更されません。
ここも手当てしてやるには、さらにこんな感じで term_link フィルタもフックしてあげましょう。
function my_term_link($termlink, $term, $taxonomy) { return ($taxonomy === 'category' ? home_url('/?cid='. $term->term_id) : $termlink); } add_filter('term_link', 'my_term_link', 10, 3);
おまけ – 記事のパーマリンクを http://example.com/?eid=xx 形式に変更する
ちなみに記事のパーマリンクを http://example.com/?eid=xx 形式に変更したい場合は、以下のようにして parse_query フィルタを使うと良いです。
class add_permalink_to_different_link { function __construct(){ add_filter('query_vars', array(&$this, 'add_query_vars')); add_action('parse_query', array(&$this, 'parse_query')); } public function add_query_vars($qvars) { $qvars[] = 'eid'; return $qvars; } public function parse_query($query) { $post_id = (int) $query->query_vars['eid']; if ( !(empty($post_id) || $post_id === 0) ) { $url = get_permalink($post_id); if ( !empty($url) && $url !== FALSE ) { $query->query_vars["p"] = $post_id; $query->query["p"] = $post_id; $query->is_single = true; $query->is_singular = true; $query->is_home = false; $query->is_404 = false; } else { $query->set_404(); } } return $query; } } new add_permalink_to_different_link;
この場合もテンプレートタグの <?php get_permalink() >
が返すリンクは変更されません。
こんな感じで post_link フィルタをフックしてあげましょう。
function my_post_link($permalink, $post, $leavename) { return ($post->post_type === 'post' ? home_url('/?eid='.$post->ID) : $permalink); } add_filter('post_link', 'my_post_link', 10, 3);
誰得だかわからない記事ですが、参考にしてやってください!
はじめまして。
JUGEMからWordPressへブログを移転中で、こちらのサイトへ辿り着きました。
有益な情報に大変助かっています!ありがとうございます。
ただ、カテゴリのリンクを http://example.com/?cid=xxに。記事のパーマリンクを http://example.com/?eid=xxに変更したく、該当の記述を丸々コピペしたのですが下記のエラーが出てしまいます。
もし原因がお分かりでしたら教えて下さい。よろしくお願いします。
Parse error: syntax error, unexpected ‘ function’ (T_STRING), expecting function (T_FUNCTION) 以下のエラーメッセージはファイルの場所/行は26とありました。