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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

WordPress

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

PHP

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

Q&A

解決済

1回答

2349閲覧

wordpressの条件分岐に詳しい方お願いします

musashidayo

総合スコア54

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/12/25 07:53

編集2017/12/25 09:31

前回の質問に回答してくださった方ありがとうございました。おかげで、解決することができたのですが色々不都合が出てきたので新たな方法を探っていますが、どうしても行き詰まってしまいました・・・・。

--------------以下が内容です-------------------
ワードプレスのアーカイブページでカテゴリに属するコメントを表示する為に、

$i = 0; global $wpdb; global $data; $query = " SELECT comment.comment_content, comment.comment_date, post.ID, post.post_title, post.post_name, meta.meta_value, count.count FROM ( SELECT cur.comment_ID, cur.comment_post_ID, cur.comment_content, cur.comment_date FROM wp_comments cur LEFT JOIN wp_comments nxt ON cur.comment_post_id = nxt.comment_post_ID AND cur.comment_date < nxt.comment_date WHERE nxt.comment_post_ID IS NULL AND cur.comment_approved = 1 ORDER BY cur.comment_date DESC ) comment, ( SELECT ID, post_title, post_name FROM wp_posts, wp_term_relationships term WHERE wp_posts.ID = term.object_id AND wp_posts.post_status = 'publish' AND term.term_taxonomy_id = 36 ) post, ( SELECT comment_ID, meta_value FROM wp_commentmeta WHERE meta_value is not null ) meta, ( SELECT count(comment_ID) as count, comment_post_ID FROM wp_comments WHERE comment_approved = 1 GROUP BY comment_post_ID ) count WHERE comment.comment_ID = meta.comment_ID AND comment.comment_post_ID = post.ID AND comment.comment_post_ID = count.comment_post_ID AND post.post_title IS NOT NULL ORDER BY comment.comment_date DESC LIMIT 30; "; $e = single_cat_title('',false); $data = $wpdb->get_results($query); foreach ($data as $value): $r = get_the_terms($value -> ID,'category'); $q = array_column ($r, 'name'); if ( !in_array($e,$q)){ continue; } else{表示したい内容} $i++; endforeach; wp_reset_postdata(); endif;

としてみたのですが、どうしてもうまく行きません
一旦出力してみて確認してみた所、
$e = single_cat_title('',false);
は正しく取得できていて、
$r = get_the_terms($value -> ID,'category');
の多次元配列までは取得できているようなのですが、
$q = array_column ($r, 'name');

Array ( )になってしまいます。
かなり初心者の為に解決方法を色々手探りで調べてみてここまでは特定できましたが、間違いがわからないので、どなたか詳しい方お願い致します。

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

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

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

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

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

kei344

2017/12/25 09:25

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

ベストアンサー

get_the_terms() が返すのはtermオブジェクトの配列なので、~~ array_column は使えません。~~(追記:私の勘違いです)

コード全体は見ていないのですが、array_columnの代わりに下記コードにすればとりあえず配列は得られると思います。

PHP

1$q = []; 2foreach ( $r as $term ) { 3 $q[] = $term->name; 4}

【get_the_terms() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/get_the_terms/

投稿2017/12/25 09:38

編集2017/12/25 12:25
kei344

総合スコア69398

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

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

退会済みユーザー

退会済みユーザー

2017/12/25 09:54

個人的に気になるので質問させてください。 WP_Termオブジェクトにarray_column()が使えないのは環境やバージョン依存でしょうか?今試してみたら指定した単一カラムの配列が普通に返ってきたのです…。 先日回答した質問の方からも、WP_Postオブジェクトにarray_column()が効かないと言われたのですが、私の環境(WP4.9.1, PHP7.0)では正常に動作しました。
musashidayo

2017/12/26 02:14

``` $e = single_cat_title('',false); $data = $wpdb->get_results($query); foreach ($data as $value): $r = get_the_terms($value -> ID,'category'); $q = []; foreach ( $r as $term ) { $q[] = $term->name; } if(!in_array($e,$q)){ continue; } else{表示したい内容} ``` としたら求めていたものが得られました。 結局array_columnは使いませんでしたが、array_columnを使う場合でしたらどういった記述になるのでしょうか?
KazuhiroHatano

2017/12/26 04:12

array_columnでオブジェクトの中身を取り出せるのはPHP7から (先出のマニュアルの変更履歴参照) 関数によっては戻り値を配列、ハッシュ配列、オブジェクトから選べる奴もいるんですが get_termsに関してはそういうのはないのでまあ、foreachなりでやる以外ないでしょうか
退会済みユーザー

退会済みユーザー

2017/12/26 04:45

なるほど、やっぱりPHPのバージョン依存だったんですね。 確かに変更履歴に思いっきり書いてますね(見落としてました)。 `array_column()`と同じ結果を得られるWP関数の`wp_list_pluck()`を使った方が良さそうですね。 wp_list_pluck()| 関数| WordPressデベロッパーリソース https://developer.wordpress.org/reference/functions/wp_list_pluck/ コメント欄をお借り失礼しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問