लंबित वस्तुओं के लिए कई सीपीटी मेनू पर अपडेट-जैसे अधिसूचना बुलबुला डालें


9

बहुत से प्लगइन्स या टिप्पणियां मेनू आइटमों में क्रमशः अपडेट और असम्बद्ध टिप्पणियों के लिए एक बुलबुले में ये नंबर सूचनाएं कैसे होती हैं, मैं सीपीटी की संख्या को प्रदर्शित करने के लिए उस बुलबुले का उपयोग करना चाहता हूं, जिसमें "लंबित समीक्षा" की स्थिति है। कैसे करने के बारे में जाने?

मुझे यह धागा मिल गया है , लेकिन यह निश्चित नहीं है कि वहाँ से कहाँ जाना है।

यह साफ-सुथरा होगा; जैसा कि मुझे उपयोगकर्ता-जनित सामग्री (कस्टम पोस्ट प्रकार) का उपयोग करने वाली साइट पर इस सुविधा की आवश्यकता है। जब भी उपयोगकर्ता एक नया सीपीटी जमा करते हैं, तो इसकी स्थिति "लंबित समीक्षा" पर सेट हो जाती है, और मैं चाहता हूं कि साइट को मेनू पर जल्दी से देखने के लिए देखना चाहिए कि कितने आइटमों पर उनके ध्यान की आवश्यकता है।

संपादित करें: अब मेरे पास यह कोड है:

// buuble notifications for custom posts with status pending
add_action( 'admin_menu', 'add_pending_bubble' );

function add_pending_bubble() {
    global $menu;

    $custom_post_count = wp_count_posts('custom-post-name');
    $custom_post_pending_count = $custom_post_count->pending;

    if ( $custom_post_pending_count ) {
        foreach ( $menu as $key => $value ) {
            if ( $menu[$key][2] == 'edit.php?post_type=custom-post-name' ) {
                $menu[$key][0] .= ' <span class="update-plugins count-' . $custom_post_pending_count . '"><span class="plugin-count">' . $custom_post_pending_count . '</span></span>';
                return;
            }
        }
    }
}

... जो काम करता है, यद्यपि थोड़ा असंगत है। कभी-कभी प्रदर्शित करना, कभी-कभी नहीं। इसके अलावा, यदि मेरे पास कई सीपीटी हैं, तो मैं उन सीपीटी के प्रत्येक मेनू आइटम के लिए यह कोड कैसे लागू कर सकता हूं? उपरोक्त कोड केवल एक सीपीटी के साथ काम करेगा।


आपके लिंक का उत्तर इसे बहुत अच्छी तरह से समझाता है, आप अपने मामले में लंबित वस्तुओं को एक क्षणिक में संग्रहीत करेंगे, आपके पास क्या कोड है?
व्यैक

इस दूसरे को भी जांचें । लेकिन, हाँ, कृपया, कोड के साथ प्रयोग करने की कोशिश करें और अपनी स्वयं की जांच यहां पोस्ट करें;)
ब्रासोफिलो

@Wyck मैंने अपना प्रश्न अपडेट किया है।
हसन

जवाबों:


12

मैंने यह कार्य एक पोस्ट प्रकार की सूची के माध्यम से पुनरावृति किया, और $menuद्वितीयक फ़ंक्शन ( $menuऑब्जेक्ट के माध्यम से मैन्युअल रूप से पुनरावृत्ति के बजाय) का उपयोग करके पोस्ट प्रकार के लिए सही कुंजी को पिनपॉइंट किया ।

लंबित पोस्ट बुलबुले

समारोह संदर्भ: get_post_typesऔर wp_count_posts

add_action( 'admin_menu', 'pending_posts_bubble_wpse_89028', 999 );

function pending_posts_bubble_wpse_89028() 
{
    global $menu;

    // Get all post types and remove Attachments from the list
    // Add '_builtin' => false to exclude Posts and Pages
    $args = array( 'public' => true ); 
    $post_types = get_post_types( $args );
    unset( $post_types['attachment'] );

    foreach( $post_types as $pt )
    {
        // Count posts
        $cpt_count = wp_count_posts( $pt );

        if ( $cpt_count->pending ) 
        {
            // Menu link suffix, Post is different from the rest
            $suffix = ( 'post' == $pt ) ? '' : "?post_type=$pt";

            // Locate the key of 
            $key = recursive_array_search_php_91365( "edit.php$suffix", $menu );

            // Not found, just in case 
            if( !$key )
                return;

            // Modify menu item
            $menu[$key][0] .= sprintf(
                '<span class="update-plugins count-%1$s" style="background-color:white;color:black"><span class="plugin-count">%1$s</span></span>',
                $cpt_count->pending 
            );
        }
    }
}

// http://www.php.net/manual/en/function.array-search.php#91365
function recursive_array_search_php_91365( $needle, $haystack ) 
{
    foreach( $haystack as $key => $value ) 
    {
        $current_key = $key;
        if( 
            $needle === $value 
            OR ( 
                is_array( $value )
                && recursive_array_search_php_91365( $needle, $value ) !== false 
            )
        ) 
        {
            return $current_key;
        }
    }
    return false;
}

ओह, हाँ - कि काम करता है! किसी कारण के लिए, बुलबुले तब गायब हो जाते हैं जब मैं संबंधित सीपीटी मेनू आइटम पर क्लिक करता हूं, लेकिन वे तब पुनः प्रकट होते हैं जब मैं wp-admin के अन्य क्षेत्रों में होता हूं। इससे परेशान मत हो, समस्या हल हो गई।
हसन

मेरे परीक्षण के माहौल में, बुलबुले गायब नहीं हुए, मजाकिया बग आपको वहां मिला ... मुझे यह बात पसंद है :) और इसे पोस्ट प्रकार और स्थिति का चयन करने के लिए सेटिंग्स के साथ एक प्लगइन के अंदर लपेटेंगे।
ब्रसोफिलो

मुझे शक है कि यह WPML के कारण है। द्विभाषी वेबसाइट का प्रबंधन करने के लिए इसका उपयोग करना, और मेरे पास अनिवार्य रूप से हर पोस्ट के 2 संस्करण हैं (cpt)। इसलिए मैं कभी-कभी बुलबुले को 2 कहता हूं जहां वास्तव में 1 लंबित पद है; क्योंकि दोनों पोस्ट उनके स्टेटस को सिंक्रोनाइज़ करते हैं। अरे, मुझे प्लगइन के बारे में पता है जब आप कर रहे हैं: D
हसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.