質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

15448閲覧

WPでカスタム投稿のターム順に投稿を表示させたい

yukiko

総合スコア41

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/06/04 09:41

WPでカスタム投稿のターム順に投稿を表示させたいと思っています。
seasonというタクソノミーのタームが春・夏・秋・冬になっており、それぞれに投稿データが複数ぶらさがっています。

ソースは下記のように書いています。

php

1$args=array( 2 'tax_query' => array( 3 array( 4 'taxonomy' => 'season', //タクソノミーを指定 5 'field' => 'slug', 6 'terms' => 'spring', 7 'operator' => 'NOT IN', 8 ), 9 ), 10 'post_type' => 'brand', //カスタム投稿名 11 'posts_per_page'=> -1, //表示件数(-1で全ての記事を表示) 12 'orderby' => 'term_order', 13 'order' => 'ASC', 14); 15 16$the_query = new WP_Query( $args ); 17if ( $the_query->have_posts() ) : 18 while ( $the_query->have_posts() ) : $the_query->the_post(); 19?> 20このあと、表示用のループ

投稿データ自体は春以外のものが表示されるのですが、並び順が、夏秋冬めちゃくちゃです。というか、投稿日時の逆順で並んでいます。

http://www.naoyu.net/wordpress/tax_query/583/
↑ここを参考に考えたのですが、まだWPを触りはじめて2週間なので、いまひとつ理解が進んでいません。
'orderby' => 'term_order',
↑これで並ぶのかと思ったのですが、何か勘違いしているのでしょうか。
Category Order and Taxonomy Terms Orderなるプラグインは導入・有効化してあります。

なにかヒントなどあれば教えていただけると助かります。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

8-0_nyan5

2017/06/04 12:08

参考にされたコードではダメなのでしょうか?
yukiko

2017/06/04 13:03

すみません。書き漏らしていました。参考サイトのコードの最初にあるソース(「これでitem_categoryのtermを取得し、h2タグでくくられたterm名を表示させました」と書いてあるすぐ上のコード)をまず動かそうとしたのですが、一件も抽出されませんでした。タクソノミー名やターム名は自分のプログラム用に変更したつもりなのですが…。PHPもよくわかっていないので、理解ができていないのだと思います。今、PHPの参考書を見ながら、基本的なことを勉強しているところです。うまく説明ができていなくて、申し訳ありません。
guest

回答2

0

ベストアンサー

ほぼ参考にされた記事のままのコードです。

php

1<?php 2 $args = array( 3 'parent' => 0, 4 'hierarchical' => 0, 5 'orderby' => 'term_order', // Category Order and Taxonomy Terms Order を使用 6 'order' => 'ASC' 7 ); 8 $taxonomy_name = 'season'; 9 $taxonomys = get_terms($taxonomy_name, $args); 10if(!is_wp_error($taxonomys) && count($taxonomys)): 11 foreach($taxonomys as $taxonomy): 12 $url = get_term_link($taxonomy->slug, $taxonomy_name); 13 $tax_posts = get_posts(array( 14 'post_type' => 'brand', 15 'posts_per_page' => -1, // 表示させたい記事数 16 'tax_query' => array( 17 array( 18 'taxonomy' => 'season', 19 'terms' => array( $taxonomy->slug ), 20 'field' => 'slug', 21 'include_children' => true, 22 'operator' => 'IN' 23 ), 24 array( 25 'taxonomy' => 'season', 26 'terms' => 'spring', 27 'field' => 'slug', 28 'operator' => 'NOT IN' 29 ), 30 'relation' => 'AND' 31 ) 32 )); 33if($tax_posts): 34?> 35<h2 id="<?php echo esc_html($taxonomy->slug); ?>" class=""><a href="<?php echo $url; ?>"><?php echo esc_html($taxonomy->name); ?></a></h2> 36<ul> 37<?php foreach($tax_posts as $tax_post): ?> 38<!--ループで表示したい内容--> 39 <li> 40 <span class="thumb"> 41 <a href="<?php echo get_permalink($tax_post->ID); ?>"> 42 <?php 43 if(has_post_thumbnail($tax_post->ID)) { 44 echo get_the_post_thumbnail($tax_post->ID,'post-thumbnail'); } 45 ?> 46 </a> 47 </span> 48 <span class="title"><?php echo get_the_title($tax_post->ID); ?></span> 49 </li> 50<!--/ループで表示したい内容--> 51<?php endforeach; ?> 52</ul> 53<?php endif; endforeach; endif; ?>

最初の$argsは、プラグインのterm_orderをもとに、
ターム順に記事を出力するためのものなのでこれがないと意味がありません。

まず、参考にされた記事のコードをそのまま試されて、
動くようなら自分のやりたいカスタマイズをしてみてはどうでしょう。

あと、
>タクソノミー名やターム名は自分のプログラム用に
と書かれていますが、最初のコードではタクソノミー名しか変更箇所はないはずですが。

投稿2017/06/05 01:29

8-0_nyan5

総合スコア2352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiko

2017/06/06 13:16

ご助言ありがとうございます。体調を崩しておりまして、返信が遅くなりました。 おっしゃる通りの情報を参考に動きましたm(__)m うまくいかなかった原因は、自分がまだWP触って2週間目で、カスタム投稿・タクソノミー・タームの意味を混同していたからでした。(それと、サーバが遅くて、再読込のタイミングも悪かったりしたかもしれません)。 アレンジしたソースは後半にコピペします。 ソース自体は下記の通りなのですが、ちゃんと動き出すにはまた罠が…。 ソースをtaxonomy.phpに書き込んで動かしたのですが、さっぱりそのソースを読んでいる感じではなく…。いったいどのプログラムが動いているのか調べたら、taxonomy.phpではなくindex.php(アーカイブを表示するphp)が動いていました。 いろいろ試行錯誤した結果、archive-brand.phpという名前のソースにしたら、意図した動きをしてくれました。 テンプレートの優先順位(??まだよくわかっていない??)に対する理解が間違っていたということでしょうか。 何にせよ、動き出したので、ほんとうに助かりました。 ありがとうございます。 (teratail自体にも慣れなくて、ソースの貼り方もなんだか汚くてすみませんm(__)m) ----------------- <?php $args = array( 'parent' => 0, 'hierarchical' => 0, 'orderby' => 'term_order', // Category Order and Taxonomy Terms Order を使用 'order' => 'ASC' ); $taxonomy_name = 'season'; $taxonomys = get_terms($taxonomy_name,$args); if(!is_wp_error($taxonomys) && count($taxonomys)): foreach($taxonomys as $taxonomy): $url = get_term_link($taxonomy->slug, $taxonomy_name); $tax_posts = get_posts(array( 'post_type' => get_post_type(), 'posts_per_page' => -1, // 表示させたい記事数 'tax_query' => array( array(         'taxonomy'=>'season',         'terms'=>array( $taxonomy->slug ),         'field'=>'slug',         'operator'=>'IN'       ),       'relation' => 'AND'     )    )); if($tax_posts): ?> <h2 id="<?php echo esc_html($taxonomy->slug); ?>" class=""><a href="<?php echo $url; ?>"><?php echo esc_html($taxonomy->name); ?></a></h2> <?php foreach($tax_posts as $tax_post): ?> <article id="post-<?php the_ID(); ?>" <?php post_class('topNews Block'); ?>> <div class="topImg"> <a href="<?php the_permalink(); ?>"> <?php if (has_post_thumbnail($tax_post->ID)): ?> <?php echo get_the_post_thumbnail($tax_post->ID,'thumbnail'); ?> <?php else: ?> <img src="<?php echo get_template_directory_uri(); ?>/img/noimage_180x180.png" alt=""> <?php endif; ?> </a> </div> <div class="topText"> <a href="<?php echo get_the_permalink($tax_post->ID); ?>"> <h3><?php echo get_the_title($tax_post->ID); ?></h3> <p><?php echo get_the_excerpt($tax_post->ID); ?></p> <time datetime="<?php echo get_the_time('Y-m-d',$tax_post->ID); ?>"><?php echo get_the_time('Y年m月d日(l)',$tax_post->ID); ?></time> </a> </div> </article> <?php endforeach; ?> <?php endif;  endforeach; endif; ?>
yukiko

2017/06/06 13:19

あ、すみません。最終的に、春以外を表示じゃなくて、春夏秋冬順に商品を一覧表示する…というソースにしました。
guest

0

解決方法:
使ったことないですが逆順になってるとおもうので、オーダーを昇順から降順にしたら
いいんじゃないでしょうか。

'order' => 'ASC' // 以下に変更 'order' => 'DESC'

説明:
日付というのは、内部的には規定された時からの経過時間をもとに日付を算出します。
規定された日(多分PHPだとUNIX時間の1970/01/01かな)からの経過時間なので、
昇順にするということは、経過時間が若い状態、すなわち、古い日付の順番になるので
はないでしょうか。

参考サイトを見ましたが、参考サイトの場合は活用用途が「2013年の春物」と絞り込み
をしていました。その場合、その年の1月のアイテムから見れた方が時系列的にみやすい
のではないでしょうか?となると、「古い日付のモノから表示する」ということになります。
なので、昇順を表す「ASC」をしていする。

今回のケースは、最新順すなわち新しい日付の順番から表示したいということになるので
経過時間が古い状態、すなわち、新しい日付の順番なので降順を表す「DESC」になるかと。

投稿2017/06/05 01:16

kanimaru

総合スコア1013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiko

2017/06/06 12:53

ご助言ありがとうございます。体調を崩しておりまして、返信が遅くなりました。 昇順と降順についてのご説明ありがとうございました。 わたしの質問の書き方が良くなかったですm(__)m。 (例)春商品が10品目/夏商品が5品目/秋商品が2品目/冬商品が1品目 であったとすると、一覧表示したときに、春商品が10品目並んだあと、夏商品が5品目並び…というふうに表示したかったのですが、春夏秋冬を無視した投稿日時の逆順に並んでいる…という悩みでした。 解決したので、これからまた投稿します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問