Je veux autoriser les virgules dans les noms de balises? Par exemple, "hello, world"
ou "portland, or"
mais Wordpress continue de les séparer. Je peux le faire à partir de la page des catégories:
image http://img839.imageshack.us/img839/6869/picturepp.png
Et ça se passe bien. Mais tout ce qui est ajouté dans la barre latérale des messages ne s'affiche pas correctement ici:
image http://img52.imageshack.us/img52/4950/picture1oax.png
Il y a quelques discussions à ce sujet ici: http://core.trac.wordpress.org/ticket/14691 mais il semble que cela ne soit pas résolu, du moins pendant un certain temps.
En attendant, je cherche une solution plus simple que d’ajouter des catégories à partir de la page des catégories.
J'ai essayé de chercher des plugins, mais je n'en ai pas vu qui pourrait être utile. Quelques-uns concernent le remplacement des virgules par d'autres caractères lors de l'affichage d'une liste de catégories ou de balises, mais je ne vois pas de plug-in permettant à l'utilisateur de remplacer le séparateur par défaut.
Je m'en fiche si je dois réparer le noyau moi-même. Idéalement, je pourrais écrire un plugin, mais après avoir parcouru une partie du code, je ne peux pas savoir où cela est traité.
Quelqu'un a-t-il une solution ou des conseils sur les fonctions et le javascript nécessaires pour lancer le piratage? Je ne sais pas par où commencer à chercher dans le code.
Pas de piratage de base nécessaire - grâce à: CROCHETS.
Les crochets permettent de résoudre le problème avec une belle combinaison de
Voici le code:
// filter for tags with comma
// replace '--' with ', ' in the output - allow tags with comma this way
// e.g. save tag as "Fox--Peter" but display thx 2 filters like "Fox, Peter"
if(!is_admin()){ // make sure the filters are only called in the frontend
function comma_tag_filter($tag_arr){
$tag_arr_new = $tag_arr;
if($tag_arr->taxonomy == 'post_tag' && strpos($tag_arr->name, '--')){
$tag_arr_new->name = str_replace('--',', ',$tag_arr->name);
}
return $tag_arr_new;
}
add_filter('get_post_tag', 'comma_tag_filter');
function comma_tags_filter($tags_arr){
$tags_arr_new = array();
foreach($tags_arr as $tag_arr){
$tags_arr_new[] = comma_tag_filter($tag_arr);
}
return $tags_arr_new;
}
add_filter('get_terms', 'comma_tags_filter');
add_filter('get_the_terms', 'comma_tags_filter');
}
Peut-être que quelques détails supplémentaires dans mon billet de blog à cette rubrique seront également utiles .. http://blog.foobored.com/all/wordpress-tags-with-commas/
Greets, Andi
Il est possible et très facile de sauvegarder des balises avec des virgules par programme.
Lorsque vous appelez wp_set_post_terms( $post_id, $terms, $taxonomy )
, si vous fournissez une chaîne, celle-ci sera éclatée dans un tableau. Si vous fournissez votre $terms
sous forme de tableau, chaque élément du tableau sera fourni sous la forme d'un terme propre, sans être divisé en plusieurs termes.
// Example term with comma.
$terms = 'Surname, Given Names';
// Creates and/or assigns multiple terms separated by a comma.
wp_set_post_terms( $post_id, $terms, $taxonomy );
// Creates and/or assigns a single term with a comma.
wp_set_post_terms( $post_id, (array) $terms, $taxonomy );
wp_insert_post
et ensuite wp_update_post
utilisent wp_set_post_terms
lorsque le $arg
tax_input
est défini.
// Ensure $terms is an array.
$args['tax_input'][$taxonomy] = (array) $terms;
$post_id = wp_insert_post( $args );
La meilleure façon de créer des termes à la volée à l'aide de l'interface utilisateur de WordPress Dashboard peut vous obliger à créer votre propre boîte méta qui soumet toute chaîne, y compris les virgules, en tant que terme unique. Certains plug-ins, tels qu'ACF Pro, le font par défaut lorsque vous créez un champ personnalisé pour enregistrer la taxonomie et que vous choisissez également de charger et d'affecter les termes lors de l'enregistrement.
/* Example JSON config snippet for an ACF Pro Export/Import. */
/* Most likely config for most of these situations: "allow_null" */
/* and "field_type" may need to be adjusted depending on the situation. */
{
"type": "taxonomy",
"field_type": "multi_select",
"allow_null": 1,
"add_term": 1,
"save_terms": 1,
"load_terms": 1
}
Même lorsqu'ils sont enregistrés avec une virgule, chaque partie de ces termes avec des virgules peut toujours apparaître séparément lors de l'édition du message. Dans ce cas, il peut être préférable de désactiver l'interface utilisateur par défaut et d'utiliser les boîtes de méta personnalisées. Cela peut être fait à l'aide des options d'écran lors de la modification d'un type de publication. Les taxonomies personnalisées peuvent également être masquées de la section d'édition rapide lors de l'inscription.
// Register Custom Taxonomy args - disable default UI in quick edit.
$args['show_in_quick_edit'] = false;
register_taxonomy( $taxonomy, (array) $post_types, $args );
vous pouvez utiliser un filtre.
Par exemple, si vous souhaitez ajouter une virgule après chaque balise dans un nuage de balises, vous pouvez insérer les éléments suivants dans votre functions.php.
function myfunc_filter_tag_cloud($args) {
$args['smallest'] = 18;
$args['largest'] = 32;
$args['unit'] = 'px';
$args['separator']= ', ';
return $args;
}
add_filter ( 'widget_tag_cloud_args', 'myfunc_filter_tag_cloud');
Voici votre solution pose. Faites attention à la ligne 2614:
/**
2588 * Updates the cache for Term ID(s).
2589 *
2590 * Will only update the cache for terms not already cached.
2591 *
2592 * The $object_ids expects that the ids be separated by commas, if it is a
2593 * string.
2594 *
2595 * It should be noted that update_object_term_cache() is very time extensive. It
2596 * is advised that the function is not called very often or at least not for a
2597 * lot of terms that exist in a lot of taxonomies. The amount of time increases
2598 * for each term and it also increases for each taxonomy the term belongs to.
2599 *
2600 * @package WordPress
2601 * @subpackage Taxonomy
2602 * @since 2.3.0
2603 * @uses wp_get_object_terms() Used to get terms from the database to update
2604 *
2605 * @param string|array $object_ids Single or list of term object ID(s)
2606 * @param array|string $object_type The taxonomy object type
2607 * @return null|bool Null value is given with empty $object_ids. False if
2608 */
2609 function update_object_term_cache($object_ids, $object_type) {
2610 if ( empty($object_ids) )
2611 return;
2612
2613 if ( !is_array($object_ids) )
2614 $object_ids = explode(',', $object_ids);
2615
2616 $object_ids = array_map('intval', $object_ids);
2617
2618 $taxonomies = get_object_taxonomies($object_type);
2619
2620 $ids = array();
2621 foreach ( (array) $object_ids as $id ) {
2622 foreach ( $taxonomies as $taxonomy ) {
2623 if ( false === wp_cache_get($id, "{$taxonomy}_relationships") ) {
2624 $ids[] = $id;
2625 break;
2626 }
2627 }
2628 }
2629
2630 if ( empty( $ids ) )
2631 return false;
2632
2633 $terms = wp_get_object_terms($ids, $taxonomies, array('fields' => 'all_with_object_id'));
2634
2635 $object_terms = array();
2636 foreach ( (array) $terms as $term )
2637 $object_terms[$term->object_id][$term->taxonomy][$term->term_id] = $term;
2638
2639 foreach ( $ids as $id ) {
2640 foreach ( $taxonomies as $taxonomy ) {
2641 if ( ! isset($object_terms[$id][$taxonomy]) ) {
2642 if ( !isset($object_terms[$id]) )
2643 $object_terms[$id] = array();
2644 $object_terms[$id][$taxonomy] = array();
2645 }
2646 }
2647 }
2648
2649 foreach ( $object_terms as $id => $value ) {
2650 foreach ( $value as $taxonomy => $terms ) {
2651 wp_cache_set($id, $terms, "{$taxonomy}_relationships");
2652 }
2653 }
2654 }
2655
Inside wp-includes/taxonomy.php . Bonne chance en piratant le code. il n'y a pas d'hameçon. c'est dur codé ... Désolé. Je pense que le piratage du code est votre seule option pour le moment.