wordpress / query_posts() を使わない固定ページでのマージ
*areinaru*.wpblog.jp
いろんな意味できちんと確認しながらやろうと、デザインテンプレートを変更したら一気にサイトが崩れた。。
えらく時間がかかりながらも、なんとか各ページの php テンプレートを準備し、最低限の挙動を確認。
ようやく再びスタートラインに立ちました。
今夜のチャレンジは、固定ページでのマージ。
なんとか query_posts() を使わない方向で(先日成功した functions.php への記述で)
対応しようとしたのだが、上手くいかん。。。
またも暗礁に乗り上げたので、一旦時間を置いてから再検索。
すると、下記のページで query_posts() が散々フルボッコにされた挙句、、、
テンプレートタグ/query posts
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts
こんなトドメの一言が。。。
固定ページのリクエストでは動作しません。
苦笑。
半泣きで「query_posts() に変わる方法」を検索ワードに据えて調べ直してみたら
ついに出会えましたヨ!
query_postsは非推奨?代わりにget_postsで条件指定!投稿を取得する方法【WordPress】
http://www.misallychan.com/entry/2016/10/28/163000
早速試したら大成功しました!どうもありがとうございました。
と締めようと思ったら、今度はページ送りが出なくなった。。。涙
というわけで、明日に続く。
wordpress / 親子カテゴリ名の表示
*reinaru*wpblog.jp
何事も反復あるのみ。
今日からは別の wordpress サイト使って、今一度環境構築をおさらいしていきます。
まずは、デザインテンプレートを混同しないように別名保存。
WordPress でテーマ名を変更する方法
http://monopocket.jp/blog/wordpress/2588/
カスタム投稿の準備とマージの設定は、前回までのやり方を実装して完了。
今回は、通常投稿とカスタム投稿で共有するカテゴリの扱いについて挑戦してみます。
やりたいこととしては、親カテゴリのphpテンプレートを、その子カテゴリにも読み込ませる、、、です。
サイトには「cinema」と「ramen」の親カテゴリに、
それぞれ評価点を示す★0~7を、子カテゴリとして紐付けしています。
とりあえず、functions.php にコードを追記したり、category.php を新設して
そっちにコードを記述とか試してみたけど不発に終わる。
そこで functions.php にコード追記(IDで指定)しつつ、
マージの方のコード記載にも新たに category による場合の追記をしたら、うまく動きましたヨ。
子カテゴリーにも親カテゴリーのテンプレートを使う
http://ri-mode.com/memo/2014/04/12/parent_template_children/
WordPress カテゴリー ID を確認する
http://wordpress-jp.info/admin/category-id/
ただ、今度はページタイトルとしてカテゴリ名を読み込んで表示させているところが、
親カテゴリ名だけ表示したい場合でも、親+子のカテゴリ名になってしまう。
子カテゴリ名のみ表示させることもできたんだけど、
どうも「cinema」と「ramen」直下の、子カテゴリ名を表示させたくないページでも
どこかの子カテゴリ名を引っ張ってきて表示させてしまう。。。
【wordpress】子カテゴリ名のみ取得+複数はスペースで区切る方法
http://web.amebablog.net/wordpress-category-php/
なかなか一筋縄にはいかないね。
今日はここまで。明日また考えよう。
wordpress / カスタム投稿のマージとページ送り #3
*gy*.wpblog.jp
普通の投稿(post)とカスタム投稿(newspost / releasepost)のマージとページ送りについて。
先日WEBデザイナーから教えてもらった "方法②" を試してみる。
★ やり方2:メインクエリをとってくる前に指定をする方法
http://www.tam-tam.co.jp/tipsnote/cms/post9420.html
導入部分より、いきなり刺激的な一文が目に飛び込んできました!(引用の引用を含む)
・・・ (略)ですが今現在query_postsの使用は推奨されていません。
我らが愛しいCodexにもこのように書かれています。
ひとことで言うと、query_posts() は決して使うべきではありません。
うまくいっているページが多いとはいえ、
今の僕はサブクエリに query_posts( ) をばっちり使ってもうとるな。。
同ページをさらに読み進めると、記載のサンプルコードが「表示件数の設定」と「投稿タイプの制限」であることが判明。
ページの説明主旨を理解しつつも、更なる わかりやすさ と 使いやすそうなサンプルコード を求めて、
ページ下部の参考リンクをクリックすることにしました。
(ちなみに「query_postsを捨てよ、pre_get_postsを使おう」っていうのも、なかなか挑発的やね!)
* * * *
[WordPress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ
http://emiac-works.com/coding/pre-get-posts-code-snipet/
ここのサイトのサンプルコードが、実にわかりやすく使いやすそうだったので、早速試してみました。
その結果、、、うまくいった!
function.php には、
カテゴリーのアーカイブ(categry.php)とreleaseカテゴリーのアーカイブ(categry-release.php)、
そして各タグのアーカイブ(tag.php)と日付アーカイブ(date.php)用の記述を加筆しました。
(ちなみに、カテゴリーのアーカイブの場合は選択したカテゴリーが抽出順位の最優先になるらしく、
投稿タイプのマージを記述しなくても自動でマージして表示されるようです)
たぶん、これによって各phpに記述したサブクエリのマージ記述は不要になる感じ。
数週間の停滞が一気にスッキリしました。
以下、function.php に記述したソースです。
<?php
// ウィジェット 既に記載済
register_sidebar(
);
// カスタムメニュー 既に記載済
register_nav_menus(array(
'navigation' => 'ナビゲーションバー'
));
function change_posts_per_page($query) {
/* 管理画面,メインクエリに干渉しないために必須 */
if( is_admin() || ! $query->is_main_query() ){
return;
}
/* カテゴリーページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_category() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* カテゴリー(リリース)ページの一覧(アーカイブ)表示件数6件、投稿マージ */
if ( $query->is_category( 'release' ) ) {
$query->set( 'posts_per_page', '6' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* タグページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_tag() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* 日付ページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_date() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
?>
とよく見てみたら、
カテゴリー(リリース)ページの一覧(アーカイブ)の表示件数6件の設定が生きてないではないか。。。
ちょっと考えて、単純にカテゴリーページの一覧(アーカイブ)と
カテゴリー(リリース)ページの一覧(アーカイブ)のコードの場所を入れ替えたら、うまく機能しました。
改めて、最終版のソース。
<?php
// ウィジェット 既に記載済
register_sidebar(
);
// カスタムメニュー 既に記載済
register_nav_menus(array(
'navigation' => 'ナビゲーションバー'
));
function change_posts_per_page($query) {
/* 管理画面,メインクエリに干渉しないために必須 */
if( is_admin() || ! $query->is_main_query() ){
return;
}
/* カテゴリー(リリース)ページの一覧(アーカイブ)表示件数6件、投稿マージ */
if ( $query->is_category( 'release' ) ) {
$query->set( 'posts_per_page', '6' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* カテゴリーページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_category() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* タグページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_tag() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
/* 日付ページの一覧(アーカイブ)表示件数5件、投稿マージ */
if ( $query->is_date() ) {
$query->set( 'posts_per_page', '5' );
$query->set( 'post_type',array( 'post','newspost','releasepost' ) );
return;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
?>
おまけ。