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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

Q&A

解決済

2回答

1221閲覧

WordPressで、WP_Queryはどこに書くのでしょうか。

tokyodesk

総合スコア56

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

0グッド

1クリップ

投稿2018/12/16 23:16

編集2018/12/18 21:42

#####コード内容

//子テーマ用関数 //子テーマ用のビジュアルエディタースタイルを適用 add_editor_style(); //以下に子テーマ用の関数を書く $args = array( 'post_type' => 'post', //条件を設定 ); $wp_query = new WP_Query($args); //条件を入れてサブループを作成 $get_num = $wp_query->post_count; //データの中から記事の総数を取得 $all_num = $wp_query->found_posts; //データの中から今表示する記事数を取得 echo '全'.$all_num.'件中、'.$get_num.'件を表示'; //用意したデータを表示

functions.phpに書いたところ、以下のような警告になりました。

#####エラー内容

Warning: Cannot modify header information - headers already sent by (output started at /home/nishimachilife/nishimachilife.webcrow.jp/public_html/wp-content/themes/cocoon-child-master/functions.php:16) in /home/nishimachilife/nishimachilife.webcrow.jp/public_html/wp-includes/pluggable.php on line 1219

一般的にはWP_Queryは子テーマ内のどこに書くのでしょうか。

【追記】
ありがとうございます。
functions.phpの読み込みが順序的に早すぎたということだと思ったのですが、どのPHPファイルよりも後に画面出力の処理が読まれるようにしたら大丈夫でしょうか。
テンプレートファイルでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーの根拠は下記です。

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

つまり、今回のエラーはWP_Query()自体ではなくecho部分で起きたエラーと思われます。

投稿2018/12/17 00:19

m.ts10806

総合スコア80765

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

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

tokyodesk

2018/12/18 21:42

ありがとうございます。 header()の処理の後に書く必要があったんですね。 追記にも記載したいのですが、具体的にはどのPHPファイルより後に読まれるように書けば無事に出力されるのでしょうか。
m.ts10806

2018/12/19 00:09

functions.phpはそもそも本流の画面出力部分で使うための機能を定義する場所という認識です。 (function はPHPでも関数を定義する宣言ですね) つまり機能を定義することはあっても基本的に画面出力の処理(echo,printなど)は書かないようにするのはまず前提です。 ただし、「画面で出力するための文字列」を用意するのはありかと思いますので、functions.phpで任意の関数を定義しておき、 あとはテンプレート内の出力したい場所にその関数を呼び出すようにしてはいかがでしょうか。 「WordPress 独自関数」や「WordPress ユーザー定義関数」で調べれば公式の記事含めて沢山出てくるのでご自身の要件に合った情報を試してみてください。
tokyodesk

2018/12/27 09:01

functions.phpは定義場所であって実行場所ではなく、実行の際はテンプレートから呼び出すということですね。 了解です。 そのようにしてみたいと思います。
guest

0

何をしたいかによります。

固定ページなら、page.php
アーカイブであれば、archive.php
カテゴリーアーカイブなら、category.php

など利用したい内容により変わります。

テンプレート階層 参照


(追記)

エラーメッセージ見落としていた...

WordPress の functions.php は、基本的に function (関数)を定義して、各フックやテンプレートファイルから呼び出す目的で使われることが多く、その場で実行されるコードは、あまり書きません。

WordPress は、functions.php を読み込んで、WordPress の初期化処理を実行してから、テンプレートファイルの HTTP ヘッダを出力するようになっていますので、functions.php の中で、直接画面出力を行うと今回のようなエラーになります。

共通する関数等で WP_Query を functions.php に記載するのであれば、関数として記載します。

php

1function my_wp_query_count164353(){ 2{ 3 $args = array( 4 'post_type' => 'post', //条件を設定 5 ); 6 $wp_query = new WP_Query($args); //条件を入れてサブループを作成 7 $get_num = $wp_query->post_count; //データの中から記事の総数を取得 8 $all_num = $wp_query->found_posts; //データの中から今表示する記事数を取得 9 echo '全'.$all_num.'件中、'.$get_num.'件を表示'; //用意したデータを表示 10}

そして、定義した関数を呼び出す場合は、テーマファイルの表示したい場所に

php

1<?php my_wp_query_count164353(); ?>

のように記載します。

投稿2018/12/16 23:40

編集2018/12/17 00:34
CHERRY

総合スコア25171

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

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

tokyodesk

2018/12/18 21:44

ありがとうございます。 質問内容とは直接関係ないところなのですが、”テンプレートファイルのHTTPヘッダ”とは、category.phpなどのテンプレートファイルの中のHTMLやPHPの記述(<?php〜)の部分のことでしょうか。 HTTPヘッダを調べるとhttpで通信する時にやりとりをする情報のようですがよくわかりませんでした。
CHERRY

2018/12/19 01:42

あ、書き方が悪いですね。あとで修正します。 どうやって説明するのがわかりやすいかなぁ...
tokyodesk

2018/12/27 09:03

こちらこそ要領を得ていなくてすみません。 お時間に余裕のある時で構いませんのでどうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問