WordPressの抜粋表示(excerpt)を以下のように動作させたかったので、自作してみました。
抜粋があれば抜粋表示
moreタグがあれば、それに従う
指定文字数より本文文字数が少なければ、そのまま表示
指定文字数より本文文字数が多ければ抜粋表示
コード
functions.phpにコピペ。
[php]<?php
//WordPress抜粋表…
ちょっとタイトルじゃ分かりづらい(少なくとも僕は。。)ですが、WordPressをカスタマイズしているとサイドメニューにカテゴリ一覧を出したり、ページ一覧を出したり、サブカテゴリや、サブページを出したり、、、、など色々することが多いと思います。
その際に、一覧を表示するコードなんかを適当に検索して、貼付けると、確かに動く!
動くんですが、その箇所はちゃんと動くけど、グローバル変数が書き換えられてしまって、他が動かなくなる。といったコードが結構あります。というか、ありました。プラグインなんかでもそういうのがあるかもしれません。
そうすると、WordPressに精通していない僕なんかは困るわけです (;゚∀゚)
サイドメニューは動いてるのに、さっきまで動いていた箇所が動かなくなってるとか後で気付いたりするわけです (p_q、)シクシク
そうなると、どこが原因か、どんどん分からなくなってしまいます。(少なくとも僕は。。)
解決方法
そういうのを防ぐ、もしくは、その状態を解決する方法として、function.php内に以下のコードを記述して、wp_head()の出力時に、$postを他の変数(今回は$_cur_page)として保持しておきます。 あとは、$postが書き換えられたーーって困った時なんかは、$_cur_pageを代わりに使うなり、もともと、$postを触らずに、$_cur_pageからデータを取得するなどして、$postが変更されない状態にしておくなど、対応が出来るようになるかと思います。コード
//wp_head()実行時にget_pageid()を実行 add_action('wp_head', 'get_pageid'); //現在のページIDを記録しておく(他のウィジェットや関数に書き換えられても良いように) function get_pageid() { global $post,$_cur_page; $_cur_page = $post; } //現在のページの属する親ページのIDリストを取得 function get_page_parent_list() { if( !is_page() ) return array(); global $_cur_page; $curr_page = $_cur_page; $hierarchy[] = $curr_page->ID; while($curr_page->post_parent) { $curr_page = &get_post($curr_page->post_parent); $hierarchy[] = $curr_page->ID; } return $hierarchy; }
参考サイト:http://soft.fpso.jp/develop/wordpress/customize/entry_2017.html
この投稿へのコメント
コメントはまだありません。