web-dev-qa-db-ja.com

Wordpressはテンプレート階層を尊重しません(single.phpやpage.phpの代わりにindex.phpを取得します)

カスタムテーマの開発中に奇妙なエラーが発生しました。

カスタム投稿タイプの単一ビュー用のテンプレートの編集を終えた後、私はページ用のテンプレートファイルの処理に移り、Wordpressはページの外観を生成するために私のテーマでpage.phpではなくindex.phpテンプレートファイルを実際に指し示していた。

私は "読書"設定でウェブサイトのホームとブログのホームの設定を変更しようとしました。私はパーマリンク構造をリフレッシュしようとしました(通常私は%postname%を使っています)。また、標準の/?= post_id構造に戻してみました。その場合はうまくいきますが…%postname%のものはすべてうまくいきません。

プラグインを無効にしましたが、何も変わりません。それは単純にかなりパーマリンクを扱うことを拒否します。 実際のパーマリンクは私のカスタム投稿タイプではうまく機能し、404エラーをスローしません。しかし、すべての単一のページと投稿に対して、single.phpとpage.php(またはそれ以降のページのテンプレート)ではなく、index.phpを取得しようとします。 私は自分のカスタム投稿タイプの設定をチェックしました...しかし、ページとの競合の可能性はありません(URLの書き換えは標準のWordpressの文字列とはまったく異なります)。

私のほとんどのインストールと同じくらい標準的な.htaccessをチェックしました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

更新

私はすべてを捨てることにしました。テスト開発サイトで、最初からクリーンインストールを始めました。 DB全体をダンプし、インストールファイルを捨てました。クリーンインストールし、有効にしましたwp_debug = true。はじめに、ダッシュボードからのエラーに気付きました。

ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.

これは、wp-contentフォルダの名前を "content"に変更したためです。

私は以前にこのコードを使って他のインストールでこれをしました(もちろん "mydomain"は私のwpconfigの中の私の実際のドメインです...)

define('WP_CONTENT_FOLDERNAME', 'content' );
define('WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME );
define('WP_CONTENT_URL', 'http://mydomain.com/' . WP_CONTENT_FOLDERNAME );
define('WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
define('WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );

ページを何度かチェックしてリロードすると、エラー文字列は消えました。私はテーマを正しくインストールすることができました(そのためWordpressはその場所フォルダを知っていたに違いありません...)

ただし、URLパーマリンクの問題は解決しません(ページの場合はpage.phpテンプレート、投稿の場合はsingle.phpの代わりにindex.phpを取得したい)。清潔で新しいインストールなので、これは私を狂わせています。

アップデート2

今はTwentyEleven/Tenでテストしていますが、まだ同じエラーが発生しています...したがって、プラグインとカスタムテーマを除外する必要があります。これはおそらくサーバー構成、htaccess、またはwpconfigに関係します。本当に不思議...これは私が同じように設定されたワードプレスサイトの半ダースを持っている同じサーバー上で実行されているので

アップデート3

wp-config.phpファイルを何度か変更して更新した後、ときどき動作するようになりました...しかし何らかの理由で再び壊れ続けます...単一のブログ投稿とページがindex.php(ブログホーム)またはページにリダイレクトされますブログの家を保持しているテンプレート(wordpress管理者からの「読書」設定で設定されている場合)。カスタム投稿タイプ、アーカイブ、bbpressフォーラムページ(個々の投稿とアーカイブ)、分類法など、すべてうまくいきます。それはただのページと投稿です。私はphpの設定とサーバー変数を二重にチェックしました。

1
unfulvio

私と同じ問題に出くわすかもしれない人々のために、私自身の質問に答えるつもりです。

私のセットアップでは、分類法を処理するプラグインがありました。これらの1つは、「年」に設定された書き換えスラッグを持っていました-おそらく、日付ベースのアーカイブ(?)とのこの競合が判明し、私の投稿やページが読み込まれず、ユーザーをブログのホームにリダイレクトしました-明らかにいくつかがありましたWordpressテンプレート階層の問題。私はさらに調査していません

プラグインの無効化中にパーマリンクを適切にフラッシュしなかったため、エラーをすばやくキャッチできませんでした-また、何らかの理由でエラーがランダムに表示されました(分類書き換えがまだ設定されているにもかかわらず、パーマリンクDIDが動作する場合があります)

私はスラッグの名前を「ピリオド」に変更し、.htaccessを削除して再作成し、Wordpressパーマリンクページからパーマリンクを作成/フラッシュすることで終わりました。

それはきっぱりと修正したようです

そう...もしあなたが似たような状況にあるなら、何らかの方法でパーマリンク構造を変更しているすべてのものをチェックしてください。カスタム投稿タイプや分類も含めて、使用しているスラッグについて考えてください。それ以外は明らかではない

乾杯

5
unfulvio

私は同じ問題に直面し、問題を把握するために1時間近く費やした後に問題を解決しました。

そのため、CPT(カスタム投稿タイプ)の単一ページでsingle-post_typeテンプレートではなくindex.phpを使用している場合は、query_postsを不適切に使用していないことを確認してください。私にとっては、wp_reset_queryを使用した後に、サイドバーページの1つでquery_postsを呼び出すのを忘れたことがわかりました。

すべてのページを見て、 Ctrl+F query_postsの場合は、各query_posts呼び出しがその後のwp_reset_query呼び出しによってクローズされていることを手動で確認してください。

2
Abbas Khan

まず、WP_DEBUGwp-config.phpを有効にします。

デフォルトのクエリを変更しているのかもしれません。どこかでquery_postsを動かしていますか?グローバル$wp_queryオブジェクトを見てください。もしそうなら、代わりにWP_Queryクラスを試すか、wp_reset_query()を実行することをお勧めします。

1
vmassuchetto

私はWP-configのあなたの設定がまだ間違っていると思います - それはあなたのABSPATHが間違った値を返している可能性があります。

あなたがチェックして変更する必要がある行は---です(私はこれを Mark Jaquithから取りました /スケルトンのローカルWordPressインストール)

// Custom Content Directory
define( 'WP_CONTENT_DIR', dirname( __FILE__ ) . '/content' );
define( 'WP_CONTENT_URL', 'http://' . $_SERVER['HTTP_Host'] . '/content' );
1
Damien

スラッグ "valentines-day"を含む親ページを持っていて、それは私のページがsingle.php(ポストテンプレート)を不適切に使うことを強制するのに十分でした!ナメクジで 'year'を使っているあなたと非常によく似た問題。スラッグ内の "day"や "year"のような日付タイプの単語は、テンプレートの自動選択を妨げることは明らかです。

この機能は、任意のページ/ URLに任意のテンプレートを使用させるために使用できます。このような奇妙な場合を修正するのに非常に役立ちます。 https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

0
Dan L