torisan
フォーラムへの返信
-
フォーラム: バグ報告と提案
返信が含まれるトピック: パーマリンク設定すると大量のクエリで遅い人の勧めで上げます。
再現条件を追加すると、パーマリンクの設定でカスタム構造を使用しているときです。
今現在、アタッチメント機能は使用していないため、やはり以前の段階からアタッチメントの速度を改善したコードは作っていません。
もしなんらかの機会があり、WP本体でも改善されていない場合は、アタッチメント部分も改善して投稿します。
フォーラム: バグ報告と提案
返信が含まれるトピック: パーマリンク設定すると大量のクエリで遅い自己レスです。
get_page_hierarchyの引数を&$postsという形にしていますが、foreach内で$postsのハードコピーを取って処理していなかったら、バグるはず。。。動いているということは、foreachは連想配列をハードコピーして処理をしていますね。。。
気持ち悪いので&をとったほうが良いかもしれません。。。(汗
フォーラム: 使い方全般
返信が含まれるトピック: 記事の並び順を、カスタムフィールドに入力したカナの50音順で表示した抜粋を無理やり使い並び変えしたことはあってもカスタムフィールドでは経験が無いので、動くコードではなく本当にアドバイスになりますが。。。(汗
カスタムフィールドで並び替えする場合は、内部で呼び出しているget_posts関数に記事取得前にmeta_keyとmeta_valueパラメータを与え、orderbyパラメータにmeta_valueを与えると並び替え出来る感じがします。
この場合Custom Query String Reloadedを改造すると早いかと思います。
このプラグインの48行目あたりのvar $orderbys = ~あたりにパラメータ値を追加し、custom_query_string関数を改造し、get_postsに与えるクエリパラメータを組み立ててあげると良いかと思います。
参考文献としてはwp-include/query.phpの2026行目あたりの$allowed_keys = ~でorderbyに与えるパラメータ値の制限設定(?)をし、2040行目のswitch構文でorderby句を組み立てています。最終手段として、この部分を改造します。
(ソースコードを読むと関数説明に書いてあるpost_nameでソートできない気がする。。。)
役に立つか分かりませんが、以上です。よろしくお願いします。
フォーラム: 使い方全般
返信が含まれるトピック: サイドバーに親ページタイトルを表示させたいですjim912さんが示しているポインタが参考により適しているかと思います。
被って申し訳ないです。フォーラム: 使い方全般
返信が含まれるトピック: サイドバーに親ページタイトルを表示させたいです以前にも質問で出ていた気がします。。。
上記が難しいようであれば、改造したものをプラグイン化したものを公開しますが。。。
元の作者が保守されていないようなので、どうなんだろう?(汗
GPLに基づけば自由な再配布・改変OKなので自分が公開しても問題はないのでしょうが。。。
公開するとしてもウィジェット機能を削った–+版になります。
改変したコードを載せといていまさら躊躇することも無い気がしますが(汗
フォーラム: 使い方全般
返信が含まれるトピック: テンプレートタグ wp_list_pages()の使い方child_ofに$post->IDを与えると良いかと思います。以下のような感じですかね。。。
<?php wp_list_pages('child_of='.$post->ID.'&title_li=&sort_column=menu_order'); ?>
the_post();を呼び出している部分があるのでそれ以降に記述すると良いかと思います。
パラメータは配列で渡しても良いですが、基本的に以下のような文字列で渡します。
パラメータ=設定値
複数のパラメータを連結するときは&で連結します。
パラメータ1=設定値1&パラメータ2=設定値2&パラメータ3=設定値3
フォーラム: 使い方全般
返信が含まれるトピック: トップページから単一記事へのリンクについてテンプレート内で単一記事を呼び出すのではなく、ショートコードを使ってよいのならば
手前味噌ですが、
手動でお勧めページや記事を表示させるWordPressプラグイン
で何故か単一記事を呼び出すショートコードを実装しています。
[pagelink id=ページID rp_content=2]
でmoreまでを表示してくれるようになります。ただブログ記事のmoreとは違い、リンク先のTOPに飛びます。
何かと複雑になっているプラグインなので使いこなしが大変かもしれません(汗
フォーラム: 使い方全般
返信が含まれるトピック: ページ内の一部分を別のページに表示する方法おそらく、タイトルとページの説明にページコンテンツの一部のみ表示したいのではないかと思いますが、プラグインは知りません(汗
ページコンテンツの一部を表示するロジック的については同フォーラムの以下が参考になります。
核となる部分を抜き出すと以下のコードでしょうか?
$content = $post->post_content; if ( preg_match('/<!--more(.*?)?-->/', $content, $matches) ) { $content = explode($matches[0], $content, 2); $content = $content[0]; $content = apply_filters( 'the_content', $content ); $content = str_replace(']]>', ']]>', $content); }
コンテンツを取得し、moreで分割しています。
改行コードとなるとまた文字数が多いときはどないすんねん!となりそうなので自由に分割地点を制御出来るmore機能を使用したほうが良いかと思います。ちなみにタイトル取得については以下のコード
$title = $post->post_title; $title = apply_filters( 'the_title', $title );
最新記事リストの取得については既にご存知かと思うので述べません。
自分も間違えていたらすいません。。。(汗
フォーラム: 使い方全般
返信が含まれるトピック: 条件付検索を行うプラグインおそらくカスタムフィールドを検索したいと考えていると思うのですが、以前にここで質問が出ていたようです。
ただ不動産だと複数のカスタムフィールドを検索対象にするかと思うので適さないかもしれません。
(get_posts()関数のソースコードを追うと連結は1個のみ)不動産モジュールで記事やページを流用するならば、少なくとも10個以上は項目があるのではないかと考えます。
WordPressの場合、検索対象のカスタムフィールドが複数ある場合、検索対象のカスタムフィールドの数の分LEFT JOINを繰り返すことになります。
InnoDB vs MyISAM パフォーマンス比較 Left Join
また検索がメインコンテンツになるので速度や負荷は重要です。
そのため速度や負荷の面でかなり疑問符が付くので、解決・検証に手間が掛かります。
(自分がやるならば、投稿・更新時にカスタムフィールドを含めたテーブル構造を持ったテーブルにコピーしちゃいますが。。。)
もし有償でも売っているならば買うのが良いのかもしれません
ただ、速度面で使い物にならない!!という事態を避けるために、速度面での要求仕様や、プラグインの速度面での検証などなど表面上見えるもの以外での考えることは多いかと思います。
あまり参考にならないかもしれませんが。。。
P.S.
ぶっちゃけ不動産モジュールの存在するXoopsを使う。どうしてもWordPressを使いたいのならば、別に不動産管理システムを作ってくっつけることを考えたほうが自分には良い気がします。フォーラム: 自作品の告知
返信が含まれるトピック: 手動でお勧めページや記事を表示させるWordPressプラグイン –これまでの要望及び修正したバージョンを配布ページにアップしました。
変更点は以下です。- ウィジェット対応
- 説明文の文字数制限機能追加
- 文字数を制限した場合はstrip_tagsするように変更
- moreリンクを全文表示もしくは説明文無しの時以外、出力されるように変更
フォーラム: 使い方全般
返信が含まれるトピック: ページのカテゴリーわけ?うっ、すいません紹介したプラグインそのままでは出来ないかもしれませんね(汗
自分は改造して使っていたことをまじ忘れていました(汗Flexi Pages Widgetで改造した関数をそのまま載せます。($options[‘depth’] == -3の動作は修正していません。。。)
でテンプレートで以下のようにすると、初めからID25のページの子ページが展開された状態で表示されます。ID25に属する子ページしか表示されません。
子をクリックするとさらに子が展開されて表示されるので希望の動作と違うかもしれませんが。。。
flexipages(‘home_link=&title_li=&extract=25&child_of=25’);
function flexipages($options = ”)
{
$key_value = explode(‘&’, $options);
$options = array();
foreach($key_value as $value) {
$x = explode(‘=’, $value);
$options[$x[0]] = $x[1]; // $options[‘key’] = ‘value’;
}if($options[‘exclude’])
$exclude = explode(‘,’,$options[‘exclude’]);
else
$exclude = array();/* tirisan追加 START */
if($options[‘extract’])
$extract = explode(‘,’,$options[‘extract’]);
else
$extract = array();
/* tirisan追加 END */if( $options[‘depth’] == -2 || !isset($options[‘depth’])) { // display subpages only in related pages
/* tirisan修正 START */
$exflg = false;
$hierarchy = flexipages_currpage_hierarchy();
foreach ($exclude as $ex) {
if ( in_array ($ex, $hierarchy) ) {
$exflg = true;
}
}$subpages = flexipages_get_subpages();
foreach ($subpages as $subpage) { //loop through the sub pages
// if the parent of any of the subpage is not in our hierarchy,
// add it to the exclusion list
if ($exflg) {
$exclude[] = $subpage[‘ID’];
} else if ( !in_array ($subpage[‘post_parent’],$extract)) {
if ( !in_array ($subpage[‘post_parent’], $hierarchy) ) {
$exclude[] = $subpage[‘ID’];
}
}
}
$options[‘depth’] = 0;
/* tirisan修正 END */
} else if( $options[‘depth’] == -3 ) { // display subpages only in related pages
// depth = -3 gets rid of parents’ siblings$hierarchy = flexipages_currpage_hierarchy();
$subpages = flexipages_get_subpages();foreach ($subpages as $subpage) { //loop through the sub pages
if (
( $subpage[‘post_parent’] != $hierarchy[0] ) &&
( $subpage[‘post_parent’] != $hierarchy[1] ) &&
( !in_array ($subpage[‘ID’], $hierarchy) )
) {
$exclude[] = $subpage[‘ID’];
}
}
$options[‘depth’] = 0;
}if($options[‘include’]) {
$include = explode(‘,’, $options[‘include’]);
$page_ids = flexipages_pageids();
foreach($page_ids as $page_id) {
if(!in_array($page_id, $include) && !in_array($page_id, $exclude))
$exclude[] = $page_id;
}
$options[‘include’] = ”;
}if($exclude)
$options[‘exclude’] = implode(‘,’, $exclude);if($options[‘title_li’]) {
$title_li = $options[‘title_li’];
$options[‘title_li’] = “”;
}if($options[‘home_link’]) {
$display .=”<li class=\”page_item”;
if(is_home()) $display .= ” current_page_item”;
$display .= “\”>“.$options[‘home_link’].”“;
}foreach($options as $key => $value) {
if($key == ‘home_link’ || $key == ‘echo’)
continue;
if($opts) $opts .= ‘&’;
$opts .= $key.’=’.$value;
}$display .= wp_list_pages(‘echo=0&’.$opts);
if($title_li && $display)
$display = “<li class=\”pagenav\”>”.$title_li.”- \n”.$display.”
“;
if(isset($options[‘echo’]) && $options[‘echo’] == 0)
return $display;
else
echo $display;
}必要なコードを切り貼りして、新しいプラグイン、もしくはテーマ関数にすると良いかもしれません。
注意点としてこのコードのままだと警告が出ることも追加しておきます。長いコードを掲載してすいません(汗
フォーラム: 使い方全般
返信が含まれるトピック: 記事ページから同カテゴリのタイトル一覧を表示詳しく分析はしていないのですが、WPの関数はグローバル変数を参照して処理する形が多く、なんかのウィジェットで書き換えちゃっているのかもしれません。。。
自分は以下のような関数をウィジェットなどを処理する前に呼び出して(header.phpかfunction.php)現カテゴリの情報を保持しています。もうちょい良い方法があるかもしれませんが。。。参考になれば幸いです。
global $_curcat;
$_curcat = getCurCategory();function getCurCategory()
{
$cate = null;
if( is_category() ) {
$now_cate = get_query_var(‘cat’);
$cate = get_category($now_cate);
} else if (is_single() ) {$cates = get_the_category();
$i = 0;
$use_category = 0;foreach ($cates as $cate) {
if($cate->category_parent > 0 && $use_category == 0)
{
$use_category = $i;
}
$i++;
}
$cate = $cates[$use_category];
}
return $cate;
}$_curcat->cat_IDでカテゴリID、$_curcat->cat_nameでカテゴリ名が取り出せます。
ここからほげほげすればお望みの処理が出来ると思います。フォーラム: 使い方全般
返信が含まれるトピック: ページのカテゴリーわけ?Flexi Pages Widgetはどうでしょう?
フォーラム: 自作品の告知
返信が含まれるトピック: 手動でお勧めページや記事を表示させるWordPressプラグイン –これまでの要望及び修正を行ったバージョンを配布ページにアップしました。
変更点は以下です。- お勧めページが未設定時、お勧め記事を入力してもお勧め記事が設定されない問題の修正
- 過去との互換性のためにrp_contentオプションを復活(定数名は変わったままです)
- プラグイン停止時にオプションを削除しないように変更
フォーラム: 自作品の告知
返信が含まれるトピック: 手動でお勧めページや記事を表示させるWordPressプラグイン –これまでの要望及び修正を行ったバージョンを配布ページにアップしました。
変更点は以下です。- 記事の抜粋表示対応
- showRecommendationPage()関数でページ指定できるように変更
- ページと投稿で表示形式が変えれるように変更
- 新規投稿時の警告が出力されないよう修正
- moreや抜粋選択時に表示される説明が無かったらmoreリンクを出力しないように修正
注意: オプションが変更になっています。「設定」 → 「お勧めページ設定」にて「ページ説明表示」と「ポスト説明表示」を確認してUpdate Optionをしてください。
また、一時的にサポートBBSを設置しました。ご要望バグ報告はそちらでお願いします。
バージョンアップの告知だけ書き込んでいきます。