WP plugin: 記事にタグ付け - Ultimate Tag Warrior 4) 本体のカスタマイズ
この章では、WordPress・UTW・他のプラグイン本体の動作を変えるカスタマイズについてメモしていきます。
目次:
危険: オススメできません (>_<)
- この記事は、WP・PHP・MySQL 初心者なぼのが自己流で行ったカスタマイズについて書いています。
- 理屈抜き・検証不十分・一応動いてはいるけどこんなんでいいのかなあ。。。(゜~゜) という、危険度・ぼのぼの度ともに 100% な代物です。「こんなチャレンジャーもいるんだなあ」程度に見ていただければ幸い。
- 「仕方ねえなあ。アドバイスしてやるか。」と思っていただけたら、さらに幸せです。(*’-'*)
- 以上を理解した上でこれを試そうという勇者なお方は、自己責任で。ぜひぜひ、ご自身で十分に検証を行ってくださいー。
Custom Query String Plugin 対応
問題点・実現したいこと
- CQS のオプションで
is_home()を設定すると、この設定内容がis_tag()にも適用されてしまう。トップページを 3件に設定したら、タグアーカイブページ1 も 3件しか表示されなくなってしまった。(;_;) is_tagの表示オプションも設定できるようにしたい。
修正内容
- 2006.6.29(WP ME 2.0.3+UTW 3.1+CQS 2.7)に行った対応を、そのまま ME 2.0.4 にも適用。2.0.4 では不適切な箇所があるかも。
- それらしいところをいじったら上手く動いた、ラッキーパンチ!的カスタム。CQSの表示件数の指定とコンディショナルタグとの連携の仕組みがなかなか理解できません。。。解説求むです。。
is_tag()自体はwp-contents/plugins/ultimate-tag-warrior.php106行目で定義されている。function is_tag() { global $utw; return ( count($utw->GetCurrentTagSet() ) > 0); }wp-content/plugins/custom-query-string.php- 52行目で CQS オプション画面の Condition の選択肢を定義している。
'is_tag'を追加。var $conditions = array('is_archive', 'is_author', 'is_category', 'is_date', 'is_year', 'is_month', 'is_day', 'is_time', 'is_search', 'is_home', 'is_paged', 'is_feed','is_tag'); - function get_query() によって表示のコントロールを実現しているっぽい。190行目に次のコードを挿入。2
elseif ($wp_query->is_tag AND $this->options['is_tag']) $this->query = 'is_tag';
- 52行目で CQS オプション画面の Condition の選択肢を定義している。
- 上記 CQS 側の修正だけだと is_home の設定値(またはデフォルト表示件数)と同じ扱いになってしまう。
wp-includes/classes.phpも修正。- 遠慮がちに 31行目に挿入。値の初期化。
var $is_tag = false; - 52行目付近に挿入(上で行を追加した後なので、行番号は多少前後する。以下同様)。これも値の初期化?
$this->is_tag = false; - 240行目付近に挿入。この条件だったらタグ(アーカイブ)ページと判断する。
function is_tag()の判断を真似っこ。いいのか?こんなんで…。(^^;global $utw; if (count($utw->GetCurrentTagSet()) > 0) { $this->is_tag = true; } - 246行目(元239行目)付近。この条件以外は
is_homeにもフラグが立ってしまうようなので、$this->is_tagを追加。if ( ! ($this->is_attachment || $this->is_archive || $this->is_single || $this->is_page || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup ||$this->is_tag) ) { $this->is_home = true; }
- 遠慮がちに 31行目に挿入。値の初期化。
「ページ」対応
# 記事に切り替えれば話が早いのでは……とも思う。(^-^;
「ページ」作成画面に Tags 欄を追加
問題点・実現したいこと
- ページ作成画面に Tags 欄がないため、タグ付けが出来ない。
- Inline Tag Adder でタグをつけても、ページを更新すると消えてしまう。これも Tags 欄がないからクリアされちゃうんだと思う。
修正内容
修正対象は WP ME 2.0.4+UTW 3.1。2006.9.6 実施。
wp-content/plugins/UltimateTagWarrior/ultimate-tag-warrior-actions.php810行目付近// Add or edit tags add_action('simple_edit_form', array('UltimateTagWarriorActions','ultimate_display_tag_widget')); add_action('edit_form_advanced', array('UltimateTagWarriorActions','ultimate_display_tag_widget'));add_action('edit_page_form', array('UltimateTagWarriorActions','ultimate_display_tag_widget'));←この行を追加- ページ作成画面で付けたタグのセーブは、
edit_postかsave_postあたりでできているみたい。
タグアーカイブにページも表示
問題点・実現したいこと
タグアーカイブページには「記事」しか表示されない。「ページ」も表示させたい。
修正内容
- 修正対象は WP ME 2.0.4+UTW 3.1。2006.9.6 実施。
- WP コアで、DB から記事を読み出すクエリの
WHERE節(抽出条件)は、wp-includes/classes.php625行目(CQS 関係修正前だと 616行目付近) の$where = apply_filters('posts_where', $where);の前で作られている。このWHERE節は、plugin API の add_filter(’posts_where’) を用いると、WPコアを触らずにプラグイン側で変更できる。(のかなあと解釈。)
- UTW では
wp-content/plugins/UltimateTagWarrior/ultimate-tag-warrior-actions.php825行目付近にadd_filter('posts_where')がある。// Display tag pages add_action('template_redirect', array('UltimateTagWarriorActions','ultimate_tag_templates')); add_filter('posts_join', array('UltimateTagWarriorActions','ultimate_posts_join'));add_filter('posts_where', array('UltimateTagWarriorActions','ultimate_posts_where'));←コレ// add_filter('posts_having',array('UltimateTagWarriorActions','ultimate_posts_having'));posts_whereが hook 名。フィルター名のところがarray(~)になっているのはよく分からない。。。 - 実際に
WHERE節を編集しているのは 751行目のfunction ultimate_posts_where($where)。
デフォルトのWHERE節の一部を置換する文を 760行目に入れてみた。$where = str_replace(' AND (post_status = "publish"', ' AND ( (post_status = "publish" or post_status = "static") ', $where);
未解決
検索結果表示ページと同様に、「ページ」のときは投稿日付とカテゴリを非表示にしたい。一般のアーカイブページでは、「ページ」かどうかの判断に $post->post_status が使えるが、タグアーカイブページでは効かない。 $post の替わりに何を使えばいいか。
その他
- Breadcrumb Navigation XT — タグアーカイブは対象外なので、if 文を使って独自にナビを出力。
- http://~/tags/タグ名/ のページ[back]
- is_archive と設定を兼ねられればベストだと思って、
elseif ($wp_query->is_archive)の内側に挿入した上で is_archive の件数を設定してみたが、デフォルト(管理パネル > オプション > 表示設定のブログページ最大表示数)が適用されてしまった。そのため、その前に書くこととした。処理順序が重要なので、私の設定値ではこれで上手く動いたが、設定する Condition によっては挿入位置の微調整が必要かも。ソース 173行目の注釈参照。[back]
関連ページ
- WP plugin[up]: ページ番号ナビ - WP-PageNavi をアップグレード 2.02
- WP plugin: 記事にタグ付け - Ultimate Tag Warrior 3) UTWテンプレートタグ編
- WP plugin: 記事にタグ付け - Ultimate Tag Warrior 2) テーマ編集編
- WP plugin[up]: パン屑ナビゲーションを表示 - Breadcrumb Navigation XT
- WP plugin: 記事にタグ付け - Ultimate Tag Warrior 1) 基本編
- WP plugin: ページ毎に記事表示数・順序を変える - Custom Query String Plugin



ページ毎に表示件数を変える Plugin:Custom Query String を入れてみた。 « affection. :
March 23rd, 2007 at 11:08
[...] WP plugin: 記事にタグ付け - Ultimate Tag Warrior 4) 本体のカスタマイズ [...]
ページ毎に表示件数を変える Plugin:Custom Query String を入れてみた。 « kappadow.jp :
April 24th, 2007 at 12:00
[...] WP plugin: 記事にタグ付け - Ultimate Tag Warrior 4) 本体のカスタマイズ [...]
ページ毎に表示件数を変える Plugin:Custom Query String を入れてみた。 - kappadow.jp :
January 11th, 2008 at 16:51
[...] WP plugin: 記事にタグ付け - Ultimate Tag Warrior 4) 本体のカスタマイズ [...]