0

クライアントの WordPress ベースの Web サイトには、次のような URL を持つ従業員ページがあり
/bio/john-doe/
/bio/nim-rod/
ます。

しかし、印刷されたパンフレットや名刺に
/nim.rod
は、次のような URL が必要で、サイトにその/bio/nim-rod/ページが表示されるようにします。

クライアントによると、これは以前は機能していました。plugins フォルダーには、この機能の書き換えルールのように見える php ファイルがあります (以下を参照) が、動作させることができません。

問題を調査したところ、WordPress のサポート サイトで次の投稿を見つけましたが、提案された修正は機能しません。

問題のトラブルシューティングを試みて、コードにいくつかのテスト ルールを追加しました。たとえば、このルールはページにリダイレクト/any.nameします。/bio/nim-rod/

$newrules['([a-zA-Z]+)\.([a-zA-Z]+)'] = 'index.php?pagename=nim-rod'; 

そのため、書き換えモジュールはカスタム ルールを見つけて/bio/nim-rod/ページを表示しますが、正規表現の一致を使用する既存のルールはサイトの 404 ページを表示することになります。そのため、正規表現パターンから一致した値を置き換えることに問題があるようですが、構文に問題はなく、さらにトラブルシューティングする方法もわかりません。既存のパターンは機能するはずですよね?

約 6 か月前にサーバーにハードウェアの問題が発生し、WordPress/PHP の元専門家がサイトを再構築してバージョン 3.3.1 にアップグレードしました。古いバージョンが何であったかはわかりませんが、新しいバージョンではこの機能が壊れている可能性があります。

参照できるトラブルシューティングのヒントはありますか?
正規表現がどのように機能しているかをデバッグまたは検査するために使用できるツールはありますか?

<?php
/**
 * @package Custom_Redirector
 * @version 1.0.0
 */
/*
Plugin Name: Custom Redirector
Plugin URI: http://wordpress.org/#
Description: 
Version: 1.0.0
Author URI: http://ma.tt/
*/

add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('init','flushRules');

// Remember to flush_rules() when adding rules
function flushRules(){
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

// Adding a new rule
function wp_insertMyRewriteRules($rules)
{
    $newrules = array();
    $newrules['([a-zA-Z]+)\.([a-zA-Z]+)'] = 'index.php?pagename=$matches[1]-$matches[2]';
    return $newrules + $rules;
}

// Adding the id var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars)
{
    array_push($vars, 'id');
    return $vars;
}
?>
4

1 に答える 1

0

これを試して;

([a-zA-Z]+)(?:\.|-)([a-zA-Z]+)

ちなみに、この文字列の場合、次の 2 つに一致しますindex.php?pagename=nim-rod

index.php?ページ名=nim-rod

それを望まない場合は、; を使用してください。

([a-zA-Z]+)-([a-zA-Z]+)
于 2013-04-17T22:07:16.453 に答える