web-dev-qa-db-ja.com

URLから/ author/slugを削除すると404になります

何時間も検索してさまざまな機能を試してみた結果、私はようやくすべてのユーザープロファイルURLから/ author /を削除しました。だからちょうど/ username /

しかし、新規ユーザーが自分のプロフィールURLを登録すると、すべて404が付与されます。私はパーマリンク画面に入って保存をクリックすることでこれを直すことができますが、私達は多くのユーザーを登録しているので私は一人一人のためにこれを行うことができません。

これは私が使っている機能です…どんなアイデアでも!

ありがとうございます。

    add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) {
   global $wpdb;
   $author_rewrite = array();
   $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");   
   foreach($authors as $author) {
       $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
       $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
   }  
   return $author_rewrite;
}

if( !is_admin() ) {
add_action('init', 'author_rewrite_so_22115103');
}

function author_rewrite_so_22115103() {
   global $wp_rewrite; 
   if( 'author' == $wp_rewrite->author_base ) $wp_rewrite->author_base = null;
}
1
js111

あなたはそれを間違っているだけです。ユーザーごとの書き換えルールを追加すると、書き換え「テーブル」が肥大化し、URL解析プロセスが遅くなります。すべてのユーザーに対して機能する一般的な書き換えルールを作成するか、「do_parse_requestフィルターを使用して代替のURL解析を記述する必要があります。

あなたの主な問題は、現在のURL構造が投稿/カテゴリ/などのurl構造と「衝突」することであり、最良の方法は、ユーザーURLに一定の予測可能なプレフィックスを使用することです/user/{user login}/...それ以外の場合、多くのユーザーがいるサイトで唯一の正しいオプションは、独自の解析を行うことです。

1
Mark Kaplun

同様にフィードをリダイレクトするために、他の同様の2つの近くにこれを追加してください:

$author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
0

author_rewrite_rulesは、WordPressが書き換え規則を再生成する必要があるときにのみ呼び出されます。だからあなたはWordPressにそれをする理由を与える必要があります。パーマリンクページを節約することは一つの方法です。別の方法は、 user_register アクションにフックすることです。これは新しいユーザーが作成された直後に呼び出されます。ハンドラー関数内で、 flush_rewrite_rules() を呼び出します。

0
Dave Ross