2012-10-24 14 views
9

10/25/2012 - अभी भी हल नहीं हुआ! कृपया नीचे देखें:टैग ऐरे सॉर्टिंग समस्या

मेरे क्लाइंट एक वर्डप्रेस टैग बादल (टैग सरणी) टैग जिसमें शामिल साथ [ "] चरित्र के रूप में अच्छी तरह से [यह] के रूप में उपसर्ग कुछ टैग के लिए है Ie:।

"rose" 
"autumn" 
The Abby 
The Cloud 
The Elephant 

जाहिर है सभी उद्धरण चिह्नों में संलग्न टैग ["] सूची के शीर्ष पर क्रमबद्ध होते हैं और []] उपसर्ग के साथ शुरू होने वाले सभी शब्द अक्षर [टी] के आसपास कहीं भी क्रमबद्ध होते हैं (तार्किक एएससी आदेश के बाद)।

यह मुझ पर छिड़क दिया गया था कि: "सभी टैग (डब्ल्यूपी टैग क्लाउड में) को क्रमबद्ध करने का आदेश दिया जाना चाहिए, लेकिन जिनके पास [" "] या [द] वर्ण हैं, वे सभी अन्य टैगों के साथ क्रमबद्ध किए जाने हैं क्रोनोलॉजिकल ऑर्डर, ["] और [द] उपसर्ग को अनदेखा कर रहा है।

मैं WP मुख्य कार्य में देखा:

**function wp_generate_tag_cloud** 

लेकिन मैं जहां शुरू करने के लिए पता नहीं है। कच्चे एसक्यूएल कथन में, मैं शायद [""] और [द] वर्णों को फ़िल्टर करने के लिए ट्रिम() का उपयोग कर सकता हूं, टैग क्लाउड सरणी बनाते हैं, लेकिन यह केवल एक विचार है जिसे मुझे नहीं पता कि आवेदन कैसे किया जाए।

+1

क्या आप उन्हें MySQL या PHP में सॉर्ट करना चाहते हैं? –

+1

मुझे लगता है कि जब तक मैं इसे WP [wp_generate_tag_cloud] कोर फ़ंक्शन पर लगा सकता हूं तब तक ठीक है। प्रश्न यह नहीं है कि MySQL क्वेरी को चयनित वर्णों को अनदेखा कैसे करें और इसके परिणामस्वरूप उन्हें एएससी (ऑर्डर द्वारा) क्रमबद्ध करें, समस्या यह है कि WP प्लेटफ़ॉर्म में "किसी भी" अच्छे समाधान को एकीकृत करने का तरीका है। धन्यवाद। – Milan

+1

क्या आप बस डेटाबेस तालिका अद्यतन नहीं कर सकते थे और उद्धरण और आलेख दोनों को हटा सकते हैं? फिर नए बनाए गए टैग के लिए इन चीजों को हटाने के लिए टैग फ़ॉर्म में फ़िल्टर की तरह कुछ जोड़ें? –

उत्तर

4

wp_generate_tag_cloud()tag_cloud_sort नामक एक फ़िल्टर को आमंत्रित करता है, जो $args पैरामीटर में निर्दिष्ट सॉर्ट ऑर्डर को ओवरराइड कर सकता है। tag_cloud_sort फ़िल्टर को टैग की एक सरणी प्राप्त होती है और वास्तविक $args पैरामीटर wp_generate_tag_cloud() पर पारित किया जाता है, इसलिए यह wp_generate_tag_cloud() आमंत्रण की पूर्ण सेटिंग्स का निरीक्षण कर सकता है और तदनुसार इसके व्यवहार को समायोजित कर सकता है।

आप कुछ इस तरह की कोशिश कर सकते:

function custom_tag_sort($tags, $args) { 
    if ($args['orderby'] != 'name') { 
     // do not reorder if sort order is not by name. 
     // wp_generate_tag_cloud() is smart enough to notice order 
     // is not changed and will proceed with its regular sort logic. 
     return $tags; 
    } 
    uasort($tags, 'custom_tag_sort_compare'); 
} 

function custom_tag_sort_compare($a, $b) { 
    return strnatcasecmp(
     custom_tag_sort_normalize($a->name), 
     custom_tag_sort_normalize($b->name) 
    ); 
} 

function custom_tag_sort_normalize($tag) { 
    // strip quote marks 
    $tag = trim($tag, '"'); 
    // strip leading definitive article 
    $tag = preg_replace('/^\s*the\s+/i', '', $tag); 
    return $tag; 
} 

add_filter('tag_cloud_sort', 'custom_tag_sort'); 

अस्वीकरण: मैं केवल wp_generate_tag_cloud() समारोह की एक सरसरी निरीक्षण के बाद यह लिखा है। मैंने इसे लाइव वर्डप्रेस इंस्टॉलेशन पर परीक्षण नहीं किया है; मैंने केवल सत्यापित किया है कि सॉर्टिंग फ़ंक्शन आपके नमूना टैग क्लाउड पर सही तरीके से काम करता है:

The Abby 
"autumn" 
The Cloud 
The Elephant 
"rose" 
+1

हाय वहाँ, यह आशाजनक लग रहा है। मैंने इसे functions.php फ़ाइल में शामिल किया है। यह अभी तक काम नहीं कर रहा है, लेकिन मुझे इसके साथ खेलने दो क्योंकि मैं आपको वोट दूंगा यदि यह मुझे सही रास्ते पर लाएगा। धन्यवाद! – Milan

+0

.. ओके, मैं इसे अभी भी वोट दूंगा, भले ही मैंने अभी भी इस स्क्रिप्ट में यह काम नहीं किया है क्योंकि मैं 'नाम' से सॉर्ट नहीं कर रहा हूं बल्कि इसके बजाय एक सरणी लौटा रहा हूं यानी: wp_tag_cloud ('format = array') – Milan

+1

डिफ़ॉल्ट 'wp_tag_cloud' और 'wp_generate_tag_cloud' दोनों के लिए' ऑर्डरबी 'तर्क' name' है, इसलिए यदि आप 'wp_tag_cloud (' format = array ') कहते हैं, तो आप अभी भी' wp_generate_tag_cloud' 'नाम से सॉर्टिंग करेंगे। मेरा कार्यान्वयन केवल गलत सॉर्टिंग से बचाता है यदि 'wp_generate_tag_cloud' _explicitly_ को एक अलग सॉर्टिंग ऑर्डर के साथ बुलाया जाता है। – lanzz

2

ठीक है तो आप वर्डप्रेस के कोर कोड को संशोधित करने से बचना चाहते हैं ... जब आपका ग्राहक अपडेट बटन को हिट करने के बाद हिट करता है, तो आपको फिर से इसमें जाना होगा और इसके साथ गड़बड़ करना होगा .. कार्रवाई का उपयोग करें इसके बजाय हुक टैग क्लाउड फ़ंक्शन के आउटपुट में हुक करने के लिए आसानी से एक है। इसे अपनी थीम फ़ंक्शन फ़ाइल में जोड़ें

function tagCloudFilter($tagCloudString, $args) 
{ 
    $tagCloudString = str_replace('The','', $tagCloudString); 
    $tagCloudString = str_replace('"','', $tagCloudString); 
} 

add_filter('wp_tag_cloud', 'tagCloudFilter', 10, 2); 

इससे कम से कम उन चीज़ों से छुटकारा पड़ेगा जिन्हें आप नहीं चाहते हैं। जहां तक ​​इसे सॉर्ट करना निश्चित नहीं है लेकिन यह आपको अपने रास्ते पर ले जाना चाहिए। jquery

के साथ सॉर्ट करना आसान हो सकता है यदि आप वास्तव में कोर कोड को संशोधित करना चाहते हैं तो टैग सरणी में फ़ोरैच लूप को स्वरूपित करने से पहले और उस लूप में ऊपर से str_replaces का उपयोग करें .. बस रन सॉर्ट करें() उस सरणी पर और आपको अच्छा होना चाहिए। लेकिन अगर यह मेरे थे मैं आधा समाधान के साथ जाना होगा और यह वर्णानुक्रमित वर्डप्रेस कोर

+0

भाग 1: हाय; धन्यवाद। आपकी टिप्पणी समझ में आता है और मैं मानता हूं कि आखिरी चीज जो मैं करना चाहता था वह है कोर को संशोधित करना, हर बार जब WP को अद्यतन करने की आवश्यकता होती है तो बदलावों को याद रखने के लिए मजबूर होना। ऐसा कहा जा रहा है, str_replace एक्शन हुक एक अच्छा समाधान है। हालांकि, मुझे यह समझने में कठिनाई हो रही है कि "function wp_generate_tag_cloud" में ठीक से कैसे कार्य करें ताकि SQL क्वेरी भी संशोधित हो। उदाहरण के लिए, मैं किसी भी तरह से मौजूदा MySQL क्वेरी को क्लॉज के साथ जोड़ सकता हूं .... ट्रिम द्वारा ऑर्डर (लीडिंग 'द' (स्लग))। (मैंने इसका परीक्षण नहीं किया, मैं बस हूं ... – Milan

+0

भाग 2: ... इसे मेरे सिर के ऊपर से खाना बनाना) लेकिन कैसे? साथ ही, जब मैं str_replace का उपयोग करता हूं तो यह सचमुच वर्णों को प्रतिस्थापित (प्रतिस्थापित) करेगा जो सरणी मानों से मुझे अभी भी बनाए रखने की आवश्यकता है। कोई और विचार? फिर से धन्यवाद। – Milan

0

यहाँ संशोधित करने के लिए की तुलना में नहीं एक विचार है:

आप मूल tag_cloud समारोह कॉपी करें और अपने कार्यों पर अपने खुद के बना सकते हैं। php।

आप परिवर्तन करते समय बनाने के लिए और समारोह के अंदर इस फिल्टर जोड़ना चाहते हैं:

$return = apply_filters('YOUR_tag_cloud_function', $return, $args); 

और फिर पिछले फिल्टर बनाने के हुक करने के लिए अपने समारोह जोड़ने के लिए:

add_filter('wp_tag_cloud', 'YOUR_tag_cloud_function'); 

मैं डॉन यह नहीं जानता कि यह काम करता है, मैंने इसका परीक्षण नहीं किया। तुम क्या सोचते हो?

संबंधित मुद्दे