0

私は現在、珍しい分類法を持つ WordPress サイトを開発しています。特定の問題を回避するには、URL の末尾にパラメーターを追加する必要があります。これは機能していますが、パラメーターをきれいにするために mod_rewrite を使用する方法が必要です。

これが私が現在持っているものです...

www.site.com/('ディレクター名' or 'プロジェクト名')/?path=('ビジュアル' or 'プロダクション')

例: www.site.com/joe-smith/?path=visual

$_GET を使用して機能のためにこの変数にアクセスしていますが、正常に動作します。問題は、URLを読み取らせたいということです...

www.site.com/joe-smith/visual または www.site.com/art/production

WordPress で .htaccess をいじるのは、これに対処する最善の方法ではないことを読みました。

助けていただければ幸いです。ありがとう!

4

1 に答える 1

1

Wordpress を使用しているため、.htaccess や mod_rewrite で何もする必要はありません。Wordpress には、書き換えルールを処理するためのシステムが組み込まれています。関数内で URL パラメーターを設定することもできます。関数はadd_rewrite_rule()あり、コーデックスの例はかなり良いです。ただし、手順を追って説明しますので、何が起こっているかを正確に確認できます。

例から次の書き換えルールを取得します。

add_rewrite_rule('^nutrition/([^/]*)/([^/]*)/?','index.php?page_id=12&food=$matches[1]&variety=$matches[2]','top');

まず、関数の引数について説明します。最初の引数は、書き換えの正規表現です。この正規表現が現在の URL で一致を見つけた場合、書き換えが開始されます。任意の URL パラメーターが配列に読み込まれ、$matches後で関数の 2 番目の引数で使用されます。

2 番目の引数は、書き換えられる実際の URL です。ここでは、ページ スラッグではなく、page_id が使用されていることに注意してください。スラッグ自体は書き換えられるため、スラッグではなく、このパラメーターにページ ID を使用することが重要です。後者のパラメーターは、ハンドラーに渡すクエリ文字列の値です。

ご存知かもしれませんが、Wordpress のすべてのページは index.php ファイルを介してルーティングされます。MVC に精通している場合、これはフロント コントローラーによく似ています。そのため、すべての書き換えには最初に index.php ファイルを含める必要があります。これは、この関数の 2 番目の引数に反映されます。他のファイルを使用してカスタムの書き換えを行うこともできますが、簡単にするために、標準の Wordpress の index.php ファイルを使用していると仮定しましょう。

最後の引数は、リライトを配置するキュー内の位置です。「上」または「下」のいずれかを使用できます。上がWordpressのリライト前、下がロード後。

この関数を使用すると、Wordpress はオンザフライで htaccess に行を追加し、現在のページに基づいて更新します。これは間違いなく、Wordpress で書き換えを行う最良の方法です! お役に立てれば!

コメントに基づく更新

このコードを functions.php ファイルに配置します。関数でラップし、書き換えルールの前に起動するアクションにフックする必要があります。正確な問題に一致する例を次に示します。

add_action('init', 'my_custom_rewrite_function');
function my_custom_rewrite_function() {
    $director_category_id = 5; // Change to correct id
    $project_category_id = 6; // Change to correct id
    $handler_page_id = 25 // The page ID for the handler

    add_rewrite_rule('^director/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$director_category_id&name=$matches[1]&path=$matches[2]','top');
    add_rewrite_rule('^project/([^/]*)/([^/]*)/?','index.php?page_id=$handler_page_id&category=$project_category_id&name=$matches[1]&path=$matches[2]','top');

    flush_rewrite_rules(); // This will make sure that the rewrite rules are added
}

get_query_var()その後、クエリ文字列引数ごとに for を実行することで、カスタム テンプレートでクエリを処理できます。

于 2013-09-10T21:22:57.777 に答える