web-dev-qa-db-ja.com

Next_posts_linkとprevious_posts_linkのURLをフィルタリングする

qTranslateプラグイン を使って多言語ウェブサイトを作成しています。このプラグインはnext_posts_linkprevious_posts_linkテンプレートタグを除いて翻訳の素晴らしい仕事をします。

ユーザーが別の言語を選択した場合、URLは次のように変わります。

http://mysite.com/test/page/2 (デフォルトの言語の場合)

http://mysite.com/fr/test/page/2 (フランス語用)

プラグインはqtrans_convertURL($url)関数を使用してURLの修正/翻訳のための機能を提供します。私が抱えている問題は、next_posts_linkおよびprevious_posts_linkテンプレートタグによって出力されるURLを変更できるようにする適切なフックまたはフィルタを見つけることです。

私が見つけた最も近い2つのWordPressフィルタは以下のとおりです。

add_filter('next_posts_link_attributes', 'my_next_attr');
add_filter('previous_posts_link_attributes', 'my_prev_attr');

どんなヒントでも大歓迎です。

2
Scott

@ t31osからの役に立つヒントのおかげで、この問題は以下のコードで修正することができます。

/***************************************************************
* Function qtranslate_next_previous_fix
* Ensure that the URL for next_posts_link & previous_posts_link work with qTranslate
***************************************************************/

add_filter('get_pagenum_link', 'qtranslate_next_previous_fix');

function qtranslate_next_previous_fix($url) {
    return qtrans_convertURL($url);
}

この修正はカスタム投稿タイプでも機能します。

更新しました

この2番目の関数は、next_post_linkprevious_post_linkテンプレートタグがカスタム投稿タイプでも正しくフィルタリングされるようにします。

/***************************************************************
* Function qtranslate_single_next_previous_fix
* Ensure that the URL for next_post_link & previous_post_link work with qTranslate
***************************************************************/

add_filter('next_post_link', 'qtranslate_single_next_previous_fix');
add_filter('previous_post_link', 'qtranslate_single_next_previous_fix');

function qtranslate_single_next_previous_fix($url) {
    $just_url = preg_match("/href=\"([^\"]*)\"/", $url, $matches);
    return str_replace($matches[1], qtrans_convertURL($matches[1]), $url);
}
4
Scott

get_pagenum_linkに対してフィルタを実行すると、あなたは望むことができるはずです。

next_posts_link/previous_posts_link関数は、それぞれ他の関数を呼び出す関数を呼び出します。これらの関数は、最終的に同じ名前のフィルターを提供するget_pagenum_link関数に戻ります。

具体的な例が必要な場合はコメントを投稿してください。

単数のポストリンク関数のために、すなわち。 next_post_link/previous_post_link(他の複数形ではない読者に注意してください)名前が一致するフィルタフックがあります。 next_post_linkprevious_post_link ..

4
t31os