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

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

ただいまの
回答率

90.99%

  • PHP

    17819questions

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

  • WordPress

    6023questions

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

  • if

    167questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 225

musashidayo

score 16

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/12/25 18:25

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

    キャンセル

回答 1

checkベストアンサー

+1

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/25 18:54

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

    キャンセル

  • 2017/12/25 21:23

    マニュアルにも書いてありますね、すみません勘違いしました。

    【PHP: array_column - Manual】
    http://php.net/manual/ja/function.array-column.php

    キャンセル

  • 2017/12/26 11: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を使う場合でしたらどういった記述になるのでしょうか?

    キャンセル

  • 2017/12/26 13:12

    array_columnでオブジェクトの中身を取り出せるのはPHP7から
    (先出のマニュアルの変更履歴参照)

    関数によっては戻り値を配列、ハッシュ配列、オブジェクトから選べる奴もいるんですが
    get_termsに関してはそういうのはないのでまあ、foreachなりでやる以外ないでしょうか

    キャンセル

  • 2017/12/26 13:45

    なるほど、やっぱりPHPのバージョン依存だったんですね。
    確かに変更履歴に思いっきり書いてますね(見落としてました)。
    `array_column()`と同じ結果を得られるWP関数の`wp_list_pluck()`を使った方が良さそうですね。

    wp_list_pluck()| 関数| WordPressデベロッパーリソース
    https://developer.wordpress.org/reference/functions/wp_list_pluck/

    コメント欄をお借り失礼しました。ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    17819questions

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

  • WordPress

    6023questions

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

  • if

    167questions

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