0

カテゴリがプログラム コードと一致する場合、URL の最初のサブディレクトリをクエリ文字列 URL に書き換える必要があります。例: AUBU などの 4 つの大文字

たとえば、次のものが必要です。

http://www.georgiancollege.ca/devprograms/AUBU/

次のように書き換えます。

http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=AUBU

しかし、次のような現在の URL に影響を与えたくありません。

http://www.georgiancollege.ca/devprograms/a-to-z/

これは次のように書き直すべきではありません:

http://www.georgiancollege.ca/devprograms/index.php?page_id=16&major=a-to-z

これは私がこれまでに持っていたもので、まったく機能していません。(ベース: http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/ )

function eg_add_rewrite_rules() {
global $wp_rewrite;

$new_rules = array(
    '(.+)/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );

更新: 上記のコードは適切なページにリダイレクトされるようになりましたが、そのページではクエリ文字列を読み取ることができません。おそらく URL の書き換えが原因で、クエリ文字列が最終ページにないためです...

だから、

$program = $_GET['major'];

メジャー コードを返さない...

4

2 に答える 2

1

Apache の URL 書き換えのハックのようです。私はMod_Rewriteで これについて行きます あなたのコードに関しては、十分に具体的でない正規表現と一致しています。4 つの大文字のみを一致させたいですか? 代わりにこれを試してみてください:

'devprograms/([A-Z]{4})/?$' => 'index.php?page_id=16&major=' . $wp_rewrite->preg_index(1)
于 2012-10-12T16:24:33.670 に答える
0

入力していただきありがとうございます。

機能したくないように見えるため、「回避策」ソリューションを使用する必要がありました。

$wp_query->query_vars を使用して、次のように $_GET または $_POST ではなく、クエリ文字列データを取得しようとしました。

if(isset($wp_query->query_vars['major'])) {
    $program = urldecode($wp_query->query_vars['major']);
}

http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/で提案されているように、ページ名のクエリ変数が同じ URL 書き換えが存在しました。

だから私は先に進みました...

新しい URL の書き換えは次のとおりです。

function add_rewrite_rules($aRules) {
  $aNewRules = array('([A-Z]{4})/outline/?$' => 'index.php?pagename=programs&major=$matches[1]');
  $aNewRules2 = array('([A-Z]{4})/?$' => 'index.php?pagename=programs&major=$matches[1]');
  $aRules = $aNewRules + $aNewRules2 + $aRules;
  return $aRules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');

私の URL の書き換えは、プログラム コードを URL に適切な方法で保持しているため、単純に REQUEST_URI を取得して、次のようにプログラム コードを解析しています。

$parts = explode('/',$_SERVER['REQUEST_URI']);
if (isset($_GET['major'])) {
  $program = $_GET['major']; 
} elseif ($parts[1] == 'devprograms') {
  $program = $parts[2];
} else {
  $program = get_the_title();
}

これは、/devprograms/BUSN と /devprograms/programs?major=BUSN の両方のリンク スタイルを説明します。

これの唯一の欠点は、プログラム コードとして「test」または「page」を使用してプログラム ページに書き換えられるため、「test」または「page」などの 4 文字の名前を持つ他のページをインストールに含めることができないことです。実際のプログラムにはなりません。ただし、これはページに名前を付けるときに簡単に回避できる問題です。

ありがとう、トーマス

于 2012-10-12T18:58:27.443 に答える