134

WordPress では、相対 URL ではなく絶対 URL を使用して画像、ファイル、リンクなどが WordPress に挿入されることに常に不満を感じていました。相対 URL は、ドメイン名の切り替え、http と https 間の変更などにはるかに便利です。今日、相対 URL を使用して WP_CONTENT_URL を定義すると、ファイルを投稿に挿入すると、絶対 URL ではなく src に相対 URL が使用されることがわかりました。 . 私がずっと欲しかったもの!ただし、WordPress の公式ドキュメントには、WP_CONTENT_URL を定義する場合は完全な URIを使用する必要があると記載されています。

WordPressコーデックスは次のように述べています

WP_CONTENT_URL をこのディレクトリの完全な URI (末尾のスラッシュなし) に設定します。

define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');

相対 URL を使用すると、すべて正常に動作するように見えます。

define( 'WP_CONTENT_URL', '/my-content-folder');

しかし、相対 URI を使用することに何か問題がありますか? 完全なURIで定義する必要があるとWordPressが述べているのには理由があるに違いないと私は考えています。

4

9 に答える 9

85

これは、コア開発者だけが答えられる/答えるべき質問だと思います。調査の結果、コア チケット #17048: URLs delivery to the browser should be root-relative が見つかりました。リード コア開発者である Andrew Nacin が説明した理由を見つけることができます。彼はこの [wp-hackers] スレッドにもリンクしています。これらのリンクの両方で、これらは WP が相対 URL を使用しない理由に関する重要な引用です。

コアチケット:

  • ルート相対 URL は実際には適切ではありません。/path/WordPress ではない可能性があり、インストールの外部にある可能性があります。したがって、実際には絶対 URL と大差ありません。

  • また、相対 URL を使用すると、インストールが移動されたときに変換を実行することが大幅に難しくなります。ほとんどの状況で検索置換が必要になります。皮肉なことに、絶対 URL を使用すると、これらの理由から移植性が高くなります。

  • 他の多くの場所では絶対 URL が必要です。これらを条件付きで追加する必要があると、処理が増えるだけでなく、潜在的なバグ (およびプラグインとの非互換性) が導入されます。

[wp-hackers] スレッド

  • WordPress は多くの場合サブディレクトリにあるため、パスの残りの部分を追加するために常にコンテンツを処理する必要があることを意味します。これにより、オーバーヘッドが発生します。

  • 相対 URL には、先頭にスラッシュがある場合とない場合の 2 種類があることに注意してください。どちらにも、これを適切に実装することを不可能にする警告があります。

  • WordPress は絶対 URL を保存する必要があります (実際に保存します)。これには、コンテンツの前処理、オーバーヘッド、あいまいさが必要ありません。再配置する必要がある場合は、データベース内のグローバル検索置換です。


また、個人的な話ですが、テーマやプラグインのコードが正しくなく、WP_CONTENT_URLが定義されているだけで壊れてしまうことを何度も発見しました。
彼らはこれが設定できることを知らず、これが真実であると想定しています: WP.URL/wp-content/WhatEver、そして常にそうであるとは限りません。そして、途中で何かが壊れます。


プラグインの相対 URL ( edseの回答にリンクされています)は、アクション フックの一連のフィルターで関数wp_make_link_relativeを適用します。これは非常に単純なコードであり、優れたオプションのようです。template_redirect

于 2013-08-29T16:54:49.487 に答える
7

私は自分のサイトでそれを解決し、これを functions.php で作成しました

add_action("template_redirect", "start_buffer");
add_action("shutdown", "end_buffer", 999);

function filter_buffer($buffer) {
    $buffer = replace_insecure_links($buffer);
    return $buffer;
}
function start_buffer(){
    ob_start("filter_buffer");
}

function end_buffer(){
    if (ob_get_length()) ob_end_flush();
}

function replace_insecure_links($str) {

   $str = str_replace ( array("http://www.yoursite.com/", "https://www.yoursite.com/") , array("/", "/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

1 つのプラグインの一部を切り取り、これを作成しました。サイト内のすべてのリンク (メニュー、CSS、スクリプトなど) が置き換えられ、すべてが機能していました。

于 2017-12-06T11:59:24.147 に答える
-4

あなたがしていると思うのは、ドメイン名を変更している間、あなたが持っているSQLダンプファイルは、古いドメイン名のすべてのインスタンスを新しいものに置き換えることができるということです. これを行うのに役立つプラグインがないため、これは利用可能な唯一のオプションです。

これが最速の方法です..

于 2013-08-26T07:16:16.890 に答える
-4

簡単な方法があります

/pagename/パーマリンクを使用する代わりに、index.php/pagename/または使用しない場合は、次のようにします。

役職

index.php?p=123

ページ

index.php?page_id=42

カテゴリー

index.php?cat=7

詳細はこちら: http://codex.wordpress.org/Linking_Posts_Pages_and_Categories

于 2015-02-02T12:04:35.177 に答える