web-dev-qa-db-ja.com

The Loop for CMSのご案内

多分私はこれについて間違ったやり方をしているのですが、これは私のシナリオです...私はブログのプラットフォームではなくCMSとしてWordPressを使用したいと思います。私は25-50ページの間のどこかにあり、少しの投稿もしないウェブサイトを持っています。

私は自分自身でテーマを開発したいと思っていますが、それはかなり簡単なはずですが、私はThe Loop関数の使用について少し混乱しています。

という事は承知しています:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

xの投稿数をプルしているページにはが使用されますが、私のシナリオでは、xの投稿数ではなくページのコンテンツのみを取得したいと思います。カスタムSQLクエリを作成する必要がありますか?

私が実行し続けている例のすべてはポストのためにループを使用しています。静的ページを使用しているだけなら、The Loopを使用する必要さえありますか? MySQLデータベースの投稿欄からページを取り出すために固有のURLを使用することはできますか?

これが理にかなっていることを願っています。

2
markmilly

厳密には、ページテンプレートでループを使用する必要はありませんが、問題はありません。ページのコンテンツはまだロードされます。投稿/ページが1つしかないため、ループは1回だけ実行されます。多くのテーマにはページテンプレートのループが含まれています。互換性の問題があると思います。

ページテンプレートを最初から作成するのであれば、ループを追加する必要はありません。その通りです。ワードプレスはURLから正しいコンテンツを取得しますが、使用する前に関数the_post()を実行する必要があります。 the_title()、the_content()などのテンプレートタグ。the_post()をテンプレートの上部に配置するだけです。

それがあなたにとって理にかなっていることを願ってください、あなたがさらに説明を必要とするかどうか尋ねることを躊躇しないでください。

2
Gioia Fueter

情報コンテンツ

ページ は、 投稿 のように、 post_types としてデータベースに保存されます。ここでの大きな違いはページです。通常の時間ベースのリストの外に住んでいます。コーデックスが言うことを確認してください

ページとは:

  • ページは投稿よりも時間に依存しないコンテンツ用です。
  • ページはページとサブページに整理できます。
  • ページは、テンプレートファイル、テンプレートタグ、およびその他のPHPコードを含むことができるさまざまなページテンプレートを使用できます。
  • 高度なテーマを広範囲にカスタマイズして使用すると、ページの表示調整がより複雑になりやすくなります。
  • 基本的に、Pagesはブログ以外のコンテンツ用です。 WordPressのインストールから全部またはほとんどの投稿を削除して、ブログ以外の標準のWebサイトを作成することができます。

何のページではありません:

  • ページは投稿ではありません、またそれらはより大きなフィクション作品から抜粋されていません。彼らはあなたのブログのメインページを巡回しません。必要に応じてWordPressプラグインを使用してデフォルトを変更できます。
  • ページをカテゴリに関連付けることはできず、タグを割り当てることもできません。 Pagesの組織構造は、タグやカテゴリからではなく、それらの階層的な相互関係からのみ発生します。
  • ページはファイルではありません。投稿と同じように、データベースに保存されています。テンプレートタグとPHPコードをページテンプレートファイルに入れることはできますが、コードフィルタリングプロセスを上書きするExec-PHPのようなWordPressプラグインがないと、これらをページまたは投稿コンテンツに入れることはできません。
  • ページはあなたのサイトのフィードに含まれていません。
  • ページや投稿は、人間や検索エンジンとは異なる方法で注目を集める可能性があります。
  • ページ(または特定の投稿)は、必要ならば静的なフロントページとして設定することができ、通常は「ブロ​​グ」と名付けられた最新のブログ投稿用の別のページセットを持つ。

ページは主に非ブログ目的で使用され、あなたのニーズを完璧に満たすでしょう。コーデックスで ページテンプレート を作成する方法を見ることができます。

実質問

あなたの質問に来るために、投稿がそうであるように、ページに入力されたすべての情報はデータベースに保存されます、しかしpost_typepostとして保存される投稿とは異なり、ページはpost_typepageとして保存されます。それを取得してこれらの情報を表示するには、データベースにクエリを実行してその情報を呼び出す必要があります。

これは、ページが読み込まれたときに返される情報をメインのクエリがどのように決定するかを示したものです。 クエリの概要

そのため、WordPressがページに表示する投稿やページを決定し、それらを表示するために使用する手順は次のとおりです。

  • あなたのブログの一部であるページの訪問者が最初にクリックするかURLをタイプするとき、WordPressはいくつかのコアファイル(wp-config.php、wp-settings.phpなど)を実行することから始めます。ファイルのロード順の詳細は、index.phpから始めて、各PHPファイルに追加のPHPファイルが含まれているか必要であるため、一連のファイルをたどってください。 )
  • WordPressはあなたがアクティブにしたプラグインをロードして初期化します(プラグインのinitアクションを呼び出します)。
  • WordPressは国際化のための "テキストドメイン"と現在アクティブなテーマからのfunctions.phpファイルをロードします。
  • WordPressは$ wp-> main()を呼び出すwp()関数を実行します($ wpはwp-includes/class-wp.phpで定義されているクラスWPのオブジェクトです)。 )これはWordPressに以下のことを指示します。-WP-> parse_request()を使用してURLを問い合わせ仕様にパースします。
  • $ wp_query-> parse_query()を使用して、コンディショナルタグで使用されるすべてのis_変数を設定します($ wp_queryは、WP-includes/query.phpで定義されているクラスWP_Queryのオブジェクトです)。この関数の名前にもかかわらず、この場合WP_Query-> parse_queryは実際には解析を行いません。これはWP-> parse_request()によって事前に行われるためです。
  • クエリ仕様をMySQLデータベースクエリに変換し、データベースクエリを実行して投稿のリストを取得します(関数WP_Query-> get_posts())。 WordPressループで使用するために投稿を$ wp_queryオブジェクトに保存します。
  • 404エラーを処理します。
  • ブログのHTTPヘッダを送信してください。
  • WordPressループ用にいくつかの変数を設定します。
  • WordPressはあなたのテンプレートをロードし、Template Hierarchyに従ってどのテンプレートファイルを使用するかを決定し、そしてそのファイルを実行します(基本的にあなたのテンプレートファイルがするように言うことは何でもします)。あるいは、WordPressはフィードファイルの1つ(wp-rss2.phpなど)を代わりに実行することができます。一般に、テンプレートまたはフィードファイルはWordPressループを実行してブログ投稿または静的ページを印刷します。
  • テンプレートまたはフィードファイルは、内蔵のWordPress機能を使用して、一部のアーカイブ、カテゴリ、または投稿へのパーマリンクを印刷することもあります。

という事は承知しています:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

xの投稿数を引っ張っているページに使用されますが、私のシナリオでは、私はxの投稿数ではなくページのコンテンツのみを引っ張りたいです

したがって、この質問に対する答えは、ループはメインクエリからの情報/データのみを出力するということです。データベースからデータを取得するのはメインクエリです。前述のように、メインクエリはURLと投稿の種類に応じた情報のみを取得します。

カスタムSQLクエリを作成する必要がありますか?

いいえ、メインクエリではすでにそれが行われています。 the_post()を使ってメインのquery()からその情報を取得することができます。カスタムクエリを作成する必要がある場合は、 WP_Query を使用してください。自分のSQLクエリを使わないでください

静的ページを使用しているだけなら、The Loopを使用する必要さえありますか?

必要ではありません、あなたはあなたの情報を表示するために単に the_post() を使うことができます。ただし、 have_posts() はループが最後に達するとループの最後をトリガーするので、ループを使用することをお勧めします。

私はこれがあなたが持つかもしれない多くの問題を説明することを願っています。私がこれをあなたに任せることができるならば、決して車輪を再発明しようとしないでください、しかしその日が来ればあなたがデザインを改善することができないという意味ではありません。しかし今のところ、基本に固執し、デフォルトのループをほぼ常に利用してください。

1
Pieter Goosen