web-dev-qa-db-ja.com

投稿編集ページの投稿タグをqTranslateと統合する

概要

Post Edit pageの中のtags widgetの中で、私はfilterのやり方を知る必要があります。

  1. タグ候補
  2. タグ用語の更新 when 投稿の保存または更新

少なくともそれが私が必要としていることです。

enter image description here

私の場合

多言語を作成するのに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 pagetags widgetにあります。既に投稿に追加されたであるタグのリストと'Most Used'リスト内のタグのリストを翻訳することができましたが、私は以下の問題に直面しています:

  1. タグの候補を取得して用語の翻訳版を表示できません。現在のところ、デフォルトの言語の用語を入力した場合にのみ用語が表示されます。
  2. 投稿が保存済み/更新済みの場合、追加済みタグリスト(新規追加または既存のタグ)と'最もよく使用される'リストの翻訳タグWordpressでは新しいタグとして扱われます。デフォルトの言語で用語を追加した場合、それらは通常どおり保存されます。

どうすれば上記の問題を解決できますか?

私が試したこと

上記の最初のハックからの最初の関数(つまり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]
  ));

};

これは期間データは更新されませんでしたという点ではうまくいきませんでした。

3
Giraldi

ユーザーがタグ入力に何かを入力し始めると、JavaScriptは(もしあれば)候補のリストを受け取るためにactionadmin-ajax.phpに設定してajax-tag-searchに要求を出します。

そのファイルでは、その アクションはコアwp_ajax_tag_search() 関数に属すると認識されています動的に生成されたwp_ajax_ajax-tag-searchフックに追加され、その直後に起動します。

関数のソースを見るとそれはやや柔軟ではありません(フィルタも何もしない)が、結果を反映して(改行で区切られた提案のリスト)死ぬので - 気にする必要はありません。

あなた自身のバージョンのタグ提案ロジック用の関数を作り、それを早めの優先順位でフックするだけです(ネイティブのものに到達しないように最後に死にます)。

3
Rarst