web-dev-qa-db-fra.com

Intégrer les étiquettes de publication dans la page d'édition avec qTranslate

Résumé

Dans le widget balises dans la page Post Edit, j'ai besoin de connaître le moyen de filtrer à travers:

  1. les balises suggestions
  2. les termes de la balise sont mis à jourlorsque enregistre ou met à jour le message

Au moins c'est ce dont je pense avoir besoin.

enter image description here

Mon cas

J'utilise qTranslate (v.2.5.32) pour créer une interface multilingue ainsi que backend. Ma préoccupation ici est montrant les termes de taxonomie traduits dans le backend, plus précisément les balises post de la page Post Edit.

qTranslate gère les traductions de taxonomie en utilisant les champs personnalisés (métaboxes)dans la page d'édition de taxonomie , une pour chaque langue, qui sont enregistrées dans le table d'optionsbase de données.

Le plugin traduit très bien les termes de taxonomie dans le front, mais dans le backend , ils ne traduisent pas. Seuls les termes de la langue par défaut sont affichés malgré le langage actuellement affiché.

Mon hac si loin

Maintenant, j'ai réussi à créer un hack afin que les termes de la bonne langue soient affichés en utilisant le code ci-dessous:

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 );

}

Le problème

Le problème se situe maintenant dans les balises du widgetdans la page Post Edit. Bien que j’ai réussi à traduire la liste des balises déjà ajoutées à l’articleet celles de la liste "Les plus utilisées", I Je rencontre les problèmes suivants:

  1. Impossible d'obtenir les suggestions de balises pour afficher la version traduite des termes. Actuellement, il ne suggère des termes que si j'ai saisi les termes de la langue par défaut.
  2. Lorsque la publication est enregistrée/mise à jour, balises traduites de la liste des balises ajoutées(nouvellement ajoutées ou existantes) et de la liste La liste 'Les plus utilisés'est traitée comme de nouveaux tagspar Wordpress. Si j'ajoute des termes dans la langue par défaut, ils seront sauvegardés normalement.

Comment résoudre les problèmes ci-dessus?

Ce que j'ai essayé

Dans la première fonction de mon hack ci-dessus (c'est-à-dire mod_wp_get_object_terms_qtranslate), j'ai ajouté wp_update_term à l'intérieur de la boucle foreach afin que le terme datalui-même soit mis à jour pour refléter le langage actuellement affiché. J'imagine que cela entraînerait l'extraction du langage correct dans la suggestion de balise list et dans la mise à jour de la publication.

foreach ($terms as $term) {
  $term->name = $meta[$term->name][$lang];

  wp_update_term($term->term_id, $taxonomy, array(
    'name' => $meta[$term->name][$lang]
  ));

};

Cela ne semblait pas fonctionner car les données de terme n'étaient pas mises à jour.

3
Giraldi

Lorsque l'utilisateur commence à saisir quelque chose dans la balise, JavaScript envoie une requête à admin-ajax.php avec action défini sur ajax-tag-search pour recevoir la liste des suggestions (le cas échéant).

Dans ce fichier, cette action est reconnue comme appartenant aux fonctions de base et wp_ajax_tag_search() est ajouté au hook wp_ajax_ajax-tag-search généré dynamiquement, qui se déclenche presque immédiatement après.

En regardant la source de la fonction, elle est plutôt inflexible (pas de filtres ou quoi que ce soit), mais comme elle fait écho aux résultats (liste de suggestions délimitées par une nouvelle ligne) et meurt, vous n’avez même pas besoin de vous en soucier.

Créez simplement votre propre version de la fonction pour la logique de suggestion de balises et accrochez-la à une priorité antérieure (mourez également à la fin pour que la version native ne soit jamais atteinte).

3
Rarst