Post Edit pageの中のtags widgetの中で、私はfilterのやり方を知る必要があります。
少なくともそれが私が必要としていることです。
多言語を作成するのにqTranslate(v.2.5.32)を使用していますフロントエンドと同様にバックエンド。ここで私が心配しているのはバックエンドに翻訳された分類用語を表示、特に投稿編集ページの投稿タグです。
qTranslateは分類編集ページでカスタムフィールド(メタボックス)を使用して分類変換を処理します。これは言語ごとにオプションテーブルデータベースに保存されます。
プラグインはフロントエンドの分類用語を非常によく翻訳しますが、バックエンドでは翻訳されませんです。現在表示されている言語にかかわらず、既定の言語内の用語のみが表示されます。
以下のコードを使用して正しい言語の用語が表示されるように、ハックを作成しました。
if (is_admin()) {
/**
* Fix translation for:
* - Taxonomy & custom taxonomy names in Post Manage page
* - List of tags already added to the post in Post
* Edit page (but have issues when saving)
*/
function mod_wp_get_object_terms_qtranslate($terms, $obj_id, $taxonomy, $args) {
// $taxonomy output seems to be wrapped
// in single quotes, thus remove them to
// make the output valid
$tax = str_replace("'", "", $taxonomy);
if ( !is_taxonomy_hierarchical($tax) ) {
$meta = get_option('qtranslate_term_name');
$lang = qtrans_getLanguage();
if ( !empty( $terms ) ) {
foreach ($terms as $term) {
$term->name = $meta[$term->name][$lang];
};
};
}
return $terms;
}
add_filter( 'wp_get_object_terms', 'mod_wp_get_object_terms_qtranslate', 0, 4 );
/**
* Fix translation for:
* - Taxonomy names in Taxonomy Manage page
* - 'Popular Tags' in Taxonomy (Tags) Manage page
* - Category filter dropdown menu in Post Manage page
* - Category list in Post Edit page
* - 'Most Used' tags list in Post Edit page
* (but have issues when saving)
*/
function mod_get_terms_qtranslate($terms, $taxonomy) {
$meta = get_option('qtranslate_term_name');
$lang = qtrans_getLanguage();
if ( !empty( $terms ) ) {
foreach ($terms as $term) {
if ($meta[$term->name][$lang]) {
$term->name = $meta[$term->name][$lang];
}
};
};
return $terms;
}
add_filter( 'get_terms', 'mod_get_terms_qtranslate', 0, 3 );
}
現在の問題はPost Edit pageのtags widgetにあります。既に投稿に追加されたであるタグのリストと'Most Used'リスト内のタグのリストを翻訳することができましたが、私は以下の問題に直面しています:
どうすれば上記の問題を解決できますか?
上記の最初のハックからの最初の関数(つまりmod_wp_get_object_terms_qtranslate
)では、表示されている現在の言語を反映するようにterm data自体が更新されるようにforeach
ループ内にwp_update_term
を追加しました。これはtag suggestionリストと投稿の更新で正しい言語を検索することになると思います。
foreach ($terms as $term) {
$term->name = $meta[$term->name][$lang];
wp_update_term($term->term_id, $taxonomy, array(
'name' => $meta[$term->name][$lang]
));
};
これは期間データは更新されませんでしたという点ではうまくいきませんでした。
ユーザーがタグ入力に何かを入力し始めると、JavaScriptは(もしあれば)候補のリストを受け取るためにaction
をadmin-ajax.php
に設定してajax-tag-search
に要求を出します。
そのファイルでは、その アクションはコア と wp_ajax_tag_search()
関数に属すると認識されています動的に生成されたwp_ajax_ajax-tag-search
フックに追加され、その直後に起動します。
関数のソースを見るとそれはやや柔軟ではありません(フィルタも何もしない)が、結果を反映して(改行で区切られた提案のリスト)死ぬので - 気にする必要はありません。
あなた自身のバージョンのタグ提案ロジック用の関数を作り、それを早めの優先順位でフックするだけです(ネイティブのものに到達しないように最後に死にます)。