मैं टैग नामों में कॉमा की अनुमति कैसे दे सकता हूं?


15

मैं टैग नामों में अल्पविराम की अनुमति देना चाहता हूं? उदाहरण के लिए, "hello, world"या "portland, or"Wordpress उन्हें अलग करता रहता है। मैं इसे श्रेणियों पृष्ठ से कर सकता हूं:

छवि http://img839.imageshack.us/img839/6869/picturepp.png

और यह ठीक दिखाता है। लेकिन पोस्ट साइडबार से जोड़ी गई कुछ भी यहाँ ठीक नहीं दिखाई देती है:

छवि http://img52.imageshack.us/img52/4950/picture1oax.png

इस पर कुछ चर्चा यहाँ है: http://core.trac.wordpress.org/ticket/14691 लेकिन ऐसा लगता है कि यह हल नहीं हो सकता है, कम से कम थोड़ी देर के लिए।

इस बीच, मैं श्रेणियों पृष्ठ से श्रेणियां जोड़ने की तुलना में एक आसान समाधान ढूंढ रहा हूं।

मैंने प्लगइन्स खोजने की कोशिश की है, और ऐसा कोई भी नहीं देखा जो मददगार हो। कुछ श्रेणियां हैं जो श्रेणियों की सूची, या टैग प्रदर्शित करते समय अन्य वर्णों के साथ कॉमा की जगह लेती हैं, लेकिन मुझे कोई प्लगइन्स नहीं दिखता है जो उपयोगकर्ता को डिफ़ॉल्ट विभाजक को बदलने की अनुमति देता है।

मुझे परवाह नहीं है अगर मुझे खुद को कोर करना है। आदर्श रूप से मैं एक प्लगइन लिख सकता था, लेकिन कुछ कोड के माध्यम से देखने के बाद मैं यह पता नहीं लगा सकता कि यह कहां से संभाला जाता है।

क्या किसी के पास हैकिंग शुरू करने के लिए क्या फ़ंक्शंस और जावास्क्रिप्ट है? मुझे यकीन नहीं है कि कोड में कहां से शुरू करना है।


1
इसे प्राप्त करने पर कोई भाग्य? मैं भी इसका हल ढूंढ रहा हूं।
सुपरर्ट्यू

मैंने उन्हें केवल श्रेणी पृष्ठ (जैसा कि ऊपर बताया गया है) से जोड़ा है। यह असुविधाजनक है लेकिन काम करता है। कोर को संशोधित करने या एक फिल्टर (अभी तक) जोड़ने पर कोई भाग्य नहीं।
cwd

1
कोर को कभी भी संशोधित न करें ;)
जेरेड

2
@Jared - यह कोर को संशोधित करने के लिए ठीक है - जब तक आप अपना मुद्दा / पैच को core.trac.wordpress.org पर सबमिट करते हैं और अपने इंस्टॉलेशन पर पैच को बनाए रखने के साथ ठीक हैं, जब तक कि यह (उम्मीद है) कोर में खींच नहीं जाता;)
cwd

उस स्थिति में, आप सही हैं। :)
जेरेड

जवाबों:


9

कोई कोर हैकिंग की जरूरत नहीं है - धन्यवाद: HOOKS।

हुक एक अच्छे संयोजन के साथ समस्या को ठीक करने की अनुमति देते हैं

  • एक फिल्टर "-" द्वारा "," आउटपुट से पहले
  • और एक "अगर" ब्लॉक सुनिश्चित करने के लिए कि आउटपुट भी व्यवस्थापक इंटरफ़ेस के लिए फ़िल्टर्ड नहीं है :)
  • और अंत में, अपने सभी टैग को "फॉक्स - पीटर" के बजाय "फॉक्स - पीटर" फॉर्मेट में कॉमा के साथ सेव करें।

यहाँ कोड है:

// 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');
}

हो सकता है कि मेरे ब्लॉग पोस्ट में कुछ अतिरिक्त विवरण उस विषय की भी मदद करें .. http://blog.foobored.com/all/wordpress-tags-with-commas/

गलियां, अंडी


यह टूट जाएगा। अल्पविराम एक निश्चित स्ट्रिंग नहीं है, इसका अनुवाद किया जा सकता है। _x( ',', 'tag delimiter' )असली सीमांकक को पकड़ने के लिए उपयोग करें ।
FUXIA

मैंने अभी तक इसका परीक्षण नहीं किया है लेकिन यह अच्छा लग रहा है - धन्यवाद
cwd

आपकी साइट पर आपके पास कस्टम टैक्स भी है, मेरा सुझाव है कि आप किसी के लिए फ़ंक्शन नाम बदल सकते हैं जो इसे समझ नहीं सकते हैं। आपके द्वारा लिखे गए कस्टम कोड पर: 'comma_tags_filter' के बजाय comma_tags_filter जो कोड को काफी नुकसान पहुंचाता है। सभी महान काम में।
डेविड एच।

1

यह संभव है और प्रोग्राम के साथ टैग को सहेजना बहुत आसान है।

कॉल करते समय wp_set_post_terms( $post_id, $terms, $taxonomy ), यदि आप एक स्ट्रिंग की आपूर्ति करते हैं, तो यह एक सरणी में विस्फोट हो जाएगा। यदि आप $termsएक सरणी के रूप में अपनी आपूर्ति करते हैं , तो सरणी में प्रत्येक आइटम को कई शर्तों में विभाजित किए बिना अपने स्वयं के शब्द के रूप में प्रदान किया जाएगा।

// 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और बाद में सेट होने पर wp_update_postउपयोग करें ।wp_set_post_terms$arg tax_input

// Ensure $terms is an array.
$args['tax_input'][$taxonomy] = (array) $terms;
$post_id = wp_insert_post( $args );

वर्डप्रेस डैशबोर्ड यूआई का उपयोग करके मक्खी पर शब्द बनाने का सबसे अच्छा तरीका, आपको अपना स्वयं का मेटा बॉक्स बनाने की आवश्यकता हो सकती है जो किसी भी स्ट्रिंग को कॉमा सहित एक ही शब्द के रूप में प्रस्तुत करता है। कुछ प्लगइन्स, जैसे कि ACF Pro, डिफ़ॉल्ट रूप से ऐसा करते हैं जब आप टैक्सोनॉमी को बचाने के लिए कस्टम फ़ील्ड बनाते हैं, और सहेजे जाने पर शर्तों को लोड और असाइन करने का चयन भी करते हैं।

/* 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
}

यहां तक ​​कि जब एक अल्पविराम से बचाया जाता है, तब भी अल्पविराम के साथ उन शब्दों में से प्रत्येक भाग पोस्ट को संपादित करते समय अलग-अलग आइटम के रूप में प्रकट हो सकता है। इस मामले में डिफ़ॉल्ट यूआई को निष्क्रिय करना और कस्टम मेटा बॉक्स पर भरोसा करना सबसे अच्छा हो सकता है। यह एक पोस्ट प्रकार को संपादित करते समय स्क्रीन विकल्प का उपयोग करके किया जा सकता है। कस्टम टैक्सोनॉमीज़ को पंजीकृत होने पर त्वरित संपादन अनुभाग से भी छिपाया जा सकता है।

// Register Custom Taxonomy args - disable default UI in quick edit.
$args['show_in_quick_edit'] = false;
register_taxonomy( $taxonomy, (array) $post_types, $args );

बस एक गंदे फिक्स के बारे में सोचा (यह अभी तक खुद पर परीक्षण नहीं किया गया है), लेकिन आप एक फ़िल्टर जोड़ सकते हैं जो हमेशा शर्तों को पवित्र करेगा, उन सभी को एक सरणी में परिवर्तित करके। add_filter( 'pre_tax_input', function( $tax_input ) { return (array) $tax_input; } );हालाँकि, यह आपको एक बार में एक शब्द प्रस्तुत करने की अनुमति देगा।
शॉन कॉकरिल

0

आप माउ एक फिल्टर का उपयोग करें।

उदाहरण के लिए, यदि आप टैग क्लाउड में प्रत्येक टैग के बाद अल्पविराम जोड़ना चाहते हैं, तो आप निम्नलिखित को अपने कार्य में लगा सकते हैं।

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

1
समस्या उन्हें कॉमा के साथ प्रदर्शित नहीं कर रही है, समस्या कॉमा को टैग / श्रेणी के नाम के हिस्से के रूप में रख रही है जब उन्हें दर्ज किया जा रहा है (पोस्ट को संपादित करते समय)। मैं यह पता लगाना चाहूँगा कि मुझे कैसे करने के लिए वर्डप्रेस (या एक प्लगइन लिखना) को संपादित करना चाहिए।
cwd

0

यहाँ अपने समाधान बिछाने है। लाइन 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  

अंदर wp- / taxonomy.php शामिल है । कोड हैक करने के लिए एक अच्छी किस्मत है। कोई हुक नहीं है। यह कठिन कोडित है ... क्षमा करें। मुझे लगता है कि कोड हैक करना अब के लिए आपका एकमात्र विकल्प है।


2
WP कोर को हैक करना शायद एक अच्छा विचार नहीं है।
क्रिसगिटेरग्यूई

2
मुझे पता है! लेकिन उन्होंने सवाल पूछा। मैंने सिर्फ जवाब दिया।
आसफ चर्टकॉफ

हां, लेकिन कोर को हैक करना गलत जवाब है। -1
एमान

3
+1 - अपनी मूल पोस्ट में मैंने उल्लेख किया कि इस मामले में कोर को हैक करना स्वीकार्य था। मुझे यह भी पता नहीं चल पाया कि इस काम को करने के लिए मुझे कोर को हैक करने की ज़रूरत कहाँ थी। कम से कम अगर मुझे पता है कि यह संभव है, तो मैं एक प्लगइन विकसित करने या WP समुदाय से हुक या फ़िल्टर के लिए एक उचित टिकट अनुरोध सबमिट करने के लिए काम कर सकता हूं। तो, आप @AsafChertkoff को धन्यवाद देते हैं, भले ही मैंने अभी तक इसका परीक्षण नहीं किया है।
cwd

@cwd, आपका स्वागत है :)। उम्मीद है की वो मदद करदे।
आसफ चर्टकॉफ़

0

टैग नामों में कॉमेस ठीक से काम नहीं करेगा क्योंकि, टैग को पोस्ट में जोड़ने पर, वर्डप्रेस इसे कई कीवर्ड के रूप में पार्स कर देगा, अल्पविराम पर टूट जाएगा।

एक साधारण तय:

का प्रयोग करें ,( अल्पविराम के लिए HTML कोड ) एक नियमित रूप से अल्पविराम के बजाय।

फिर:

  • , पोस्ट के अंदर एक अच्छा अल्पविराम, टैग पृष्ठ शीर्षक और अन्य स्थानों का एक समूह के रूप में प्रदर्शित करेगा।
  • यह ,टैग के नाम को टाइप करते समय कच्चे, जैसे , व्यवस्थापक इंटरफ़ेस के अंदर प्रदर्शित करेगा ।

HTML इकाई का उपयोग करके FYI, ,काम नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.