Dans le widget balises dans la page Post Edit, j'ai besoin de connaître le moyen de filtrer à travers:
Au moins c'est ce dont je pense avoir besoin.
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é.
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 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:
Comment résoudre les problèmes ci-dessus?
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.
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).