もともと自作プラグインにて「固定ページ」+「カスタムフィールド」で表示前に処理を行っていました。
pre_get_postsフックで表示前に処理を実行
add_action('pre_get_posts', array($this, 'my_pre_get_posts' ));
public function my_pre_get_posts($query){
// 管理画面 or メインクエリーではない or 固定ページのオブジェクトが無い 場合は処理中止
if (is_admin() || ! $query->is_main_query() || empty(get_queried_object()) ) {
return;
}
// 以後、カスタムフィールドの値で処理
}
このようなコードで問題なく処理が出来ていました。
その後「カスタム投稿タイプ」というのが使えることを知り、コードを調整しました。
自作プラグインのコンストラクタでカスタム投稿タイプを追加
register_post_type( 'custom-page', $args);
しかし、上記の get_queried_object()
でオブジェクトが取得できなくなってしまいました。
そのため以後の処理コードを実行することが出来ません。
$query
の中身を下記ページで比較してみました。
・固定ページ queried_object 有り
・カスタム投稿ページ queried_object 無し
・存在しないページ queried_object 無し
$queryの出力を比較してみたところ「存在しないページ」と同じようになっています。
しかし、最終的にはページはちゃんと表示されています。
実際のカスタム投稿の$query内容がこちらです。
WP_Query Object
(
[query] => Array
(
[page] =>
[custom-page] => parent/children
[post_type] => custom-page
[name] => parent/children
)
[query_vars] => Array
(
[page] =>
[custom-page] => parent/children
[post_type] => custom-page
[name] => parent/children
[error] =>
[m] =>
[p] => 0
[post_parent] =>
[subpost] =>
[subpost_id] =>
[attachment] =>
[attachment_id] => 0
[static] =>
[pagename] =>
[page_id] => 0
[second] =>
[minute] =>
[hour] =>
[day] => 0
[monthnum] => 0
[year] => 0
[w] => 0
[category_name] =>
[tag] =>
[cat] =>
[tag_id] =>
[author] =>
[author_name] =>
[feed] =>
[tb] =>
[paged] => 0
[meta_key] =>
[meta_value] =>
[preview] =>
[s] =>
[sentence] =>
[title] =>
[fields] =>
[menu_order] =>
[embed] =>
[category__in] => Array
(
)
[category__not_in] => Array
(
)
[category__and] => Array
(
)
[post__in] => Array
(
)
[post__not_in] => Array
(
)
[post_name__in] => Array
(
)
[tag__in] => Array
(
)
[tag__not_in] => Array
(
)
[tag__and] => Array
(
)
[tag_slug__in] => Array
(
)
[tag_slug__and] => Array
(
)
[post_parent__in] => Array
(
)
[post_parent__not_in] => Array
(
)
[author__in] => Array
(
)
[author__not_in] => Array
(
)
)
[tax_query] =>
[meta_query] =>
[date_query] =>
[post_count] => 0
[current_post] => -1
[in_the_loop] =>
[comment_count] => 0
[current_comment] => -1
[found_posts] => 0
[max_num_pages] => 0
[max_num_comment_pages] => 0
[is_single] => 1
[is_preview] =>
[is_page] =>
[is_archive] =>
[is_date] =>
[is_year] =>
[is_month] =>
[is_day] =>
[is_time] =>
[is_author] =>
[is_category] =>
[is_tag] =>
[is_tax] =>
[is_search] =>
[is_feed] =>
[is_comment_feed] =>
[is_trackback] =>
[is_home] =>
[is_404] =>
[is_embed] =>
[is_paged] =>
[is_admin] =>
[is_attachment] =>
[is_singular] => 1
[is_robots] =>
[is_posts_page] =>
[is_post_type_archive] =>
[query_vars_hash:WP_Query:private] => f0da19eaf2b3e3204ad56b687e2b4ecc
[query_vars_changed:WP_Query:private] =>
[thumbnails_cached] =>
[stopwords:WP_Query:private] =>
[compat_fields:WP_Query:private] => Array
(
[0] => query_vars_hash
[1] => query_vars_changed
)
[compat_methods:WP_Query:private] => Array
(
[0] => init_query_flags
[1] => parse_tax_query
)
)
今のところ、ページを特定できそうな情報としては get_query_var('name')
だけのように思えます。
子ページを持っている場合は、「親ページ/子ページ」の値が格納されています。
get_queried_object()
のように表示しようとしているページのデータを取得するにはどのような方法があるでしょうか?
【追記】
get_page_by_path()
で name からページ情報が取得できるようだったので、コードを次のようにしてテストしました。
結果、無事にデータを取得することが出来ました。
public function my_pre_get_posts($query){
print_r( get_page_by_path(get_query_var('name'),OBJECT,get_query_var('post_type') ));
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
追記にも書きましたが、 get_page_by_path()
でデータを取得できました。
public function my_pre_get_posts($query){
print_r( get_page_by_path(get_query_var('name'),OBJECT,get_query_var('post_type') ));
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 91.05%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる