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

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

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

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

PHP

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

Q&A

解決済

2回答

1551閲覧

【Wordpress】WP_Queryで取得結果が0件なのに、結果が表示される

ask.jino

総合スコア1

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/10/15 03:51

前提・実現したいこと

wp_postsには様々なデータが登録されており、該当する記事を取得したい。

発生している問題・エラーメッセージ

'post_type' => 'page'
を指定することで固定ページの情報を取得することができるのですが
試しに
'post_type' => 'djfはでぃおfhd'
で実行してみても結果が取得されます。
結果内容は固定ページではなく、「投稿(post)」の内容になります。

初学者なので理解ができていないのですが
'post_type' => 'djfはでぃおfhd'
に該当するデータは無かったので
何も表示されないのでないかと思うのですが
なぜ、「投稿(post)」の内容が表示されるのか理解ができず
教えていただきたいです。

該当のソースコード

php

1 $args = array( 2 'post_type' => 'djfはでぃおfhd', 3 // 'post_type' => 'page', 4 'orderby' => 'date', 5 'order' => 'DESC', 6 'posts_per_page' => 3, 7 ); 8 // サブループ 9 $my_query = new WP_Query( $args );

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

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

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

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

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

guest

回答2

0

ベストアンサー

/wp-includes/class-wp-query.php

if ( 'any' === $post_type ) { $in_search_post_types = get_post_types( array( 'exclude_from_search' => false ) ); if ( empty( $in_search_post_types ) ) { $where .= ' AND 1=0 '; } else { $where .= " AND {$wpdb->posts}.post_type IN ('" . implode( "', '", array_map( 'esc_sql', $in_search_post_types ) ) . "')"; } } elseif ( ! empty( $post_type ) && is_array( $post_type ) ) { $where .= " AND {$wpdb->posts}.post_type IN ('" . implode( "', '", esc_sql( $post_type ) ) . "')"; } elseif ( ! empty( $post_type ) ) { $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_type = %s", $post_type ); $post_type_object = get_post_type_object( $post_type ); } elseif ( $this->is_attachment ) { $where .= " AND {$wpdb->posts}.post_type = 'attachment'"; $post_type_object = get_post_type_object( 'attachment' ); } elseif ( $this->is_page ) { $where .= " AND {$wpdb->posts}.post_type = 'page'"; $post_type_object = get_post_type_object( 'page' ); } else { $where .= " AND {$wpdb->posts}.post_type = 'post'"; $post_type_object = get_post_type_object( 'post' ); }

何も該当しなければ最終的にpostから引っ張るって事になっている。
要はそういう仕様。

投稿2021/10/15 08:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ask.jino

2021/10/15 08:57

Space-Monkey様 回答ありがとうございます。 なるほど、該当なければpostからデータを取得する仕様になっているのですね! 勉強になりました。 ありがとうございます。 もう少し「class-wp-query.php」の内容を見てみようと思います。
guest

0

WP_Query に渡される引数の post_type クエリは、WP_Query クラスの parse_query メソッド内でサニタイズ処理されます(class-wp-query.phpの1044行目〜1050行目)。

php

1// class-wp-query.php#L1044-1050 2 3 if ( ! empty( $qv['post_type'] ) ) { 4 if ( is_array( $qv['post_type'] ) ) { 5 $qv['post_type'] = array_map( 'sanitize_key', $qv['post_type'] ); 6 } else { 7 $qv['post_type'] = sanitize_key( $qv['post_type'] ); 8 } 9 }

このとき sanitize_key 関数内の置換処理

php

1// wp-includes/formatting.php#L2141 2 3 $key = preg_replace( '/[^a-z0-9_\-]/', '', $key );

によって全角文字はすべて取り除かれます。ですので post_type に何も指定していないものとして処理され、結果としてデフォルトの投稿タイプである post の結果が返ってきます。

投稿2021/10/15 09:04

YukiYamashina

総合スコア1011

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

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

ask.jino

2021/10/15 09:58

YukiYamashina様 回答ありがとうございます。 仰る通り、半角でデタラメな値を設定して実行してみたところ 0件で返却されてきました! 全角だったことがポイントだったのですね! 非常に分かりやすく、理解を深めることができました。 優秀な方から回答いただけてうれしかったです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問