วางฟองการแจ้งเตือนที่เหมือนอัปเดตไว้ในเมนู CPT หลายรายการสำหรับรายการที่ค้างอยู่


9

เช่นเดียวกับที่รายการเมนูปลั๊กอินหรือความคิดเห็นมีการแจ้งเตือนตัวเลขเหล่านี้ในฟองสบู่สำหรับการอัปเดตและความคิดเห็นที่ไม่ได้ทำการถอดรหัสตามลำดับฉันต้องการใช้ฟองนั้นเพื่อแสดงจำนวนของ CPT ที่มีสถานะ "รอตรวจสอบ" ทำยังไงต่อไป?

ฉันได้พบกระทู้นี้แต่ไม่แน่ใจว่าจะไปจากที่นั่น

นั่นจะเป็นเรื่องเรียบร้อย ตามที่ฉันต้องการคุณสมบัตินี้ในเว็บไซต์ที่ใช้เนื้อหาที่ผู้ใช้สร้างขึ้น (ประเภทโพสต์ที่กำหนดเอง) เมื่อใดก็ตามที่ผู้ใช้ส่ง CPT ใหม่สถานะของมันจะถูกตั้งค่าเป็น "รอการตรวจสอบ" และฉันต้องการให้ผู้ดูแลไซต์มองไปที่เมนูเพื่อดูจำนวนรายการที่ต้องการความสนใจ

แก้ไข:ฉันมีรหัสนี้แล้ว:

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

... ซึ่งใช้งานได้แม้ว่าจะไม่สอดคล้องกันบ้าง บางครั้งการแสดงบางครั้งก็ไม่ นอกจากนี้หากฉันมี CPT หลายตัวฉันจะใช้รหัสนี้กับรายการเมนูแต่ละรายการของ CPT เหล่านั้นได้อย่างไร โค้ดด้านบนจะทำงานกับ CPT เพียงอันเดียว


คำตอบในลิงก์ของคุณอธิบายได้ค่อนข้างดีคุณควรจัดเก็บรายการที่ค้างอยู่ชั่วคราวสำหรับกรณีของคุณคุณมีรหัสอะไรบ้าง
Wyck

ตรวจสอบอันนี้อีกด้วย แต่ใช่โปรดลองทดสอบด้วยรหัสและโพสต์การสอบสวนของคุณเองที่นี่;)
brasofilo

@ ฉันได้อัปเดตคำถามของฉันแล้ว
Hassan

คำตอบ:


12

ฉันทำสิ่งนี้ซ้ำผ่านรายการประเภทโพสต์และหา$menuคีย์ที่ถูกต้องสำหรับประเภทโพสต์โดยใช้ฟังก์ชั่นที่สอง (แทนการวนซ้ำด้วยตนเองผ่าน$menuวัตถุ)

รอการโพสต์ฟองสบู่

อ้างอิงฟังก์ชัน: และget_post_typeswp_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;
}

โอ้ใช่แล้ว - ใช้ได้ผล! ด้วยเหตุผลบางอย่างฟองสบู่ก็หายไปเมื่อฉันคลิกที่รายการเมนู CPT ที่เกี่ยวข้อง แต่จะปรากฏขึ้นอีกครั้งเมื่อฉันอยู่ในพื้นที่อื่น ๆ ใน wp-admin ไม่ต้องกังวลกับปัญหานั้นแก้ไขได้
Hassan

ในสภาพแวดล้อมการทดสอบของฉันฟองจะไม่หายไปข้อผิดพลาดตลกที่คุณไปถึงที่นั่น ... ฉันชอบสิ่งนี้ :) และจะห่อไว้ในปลั๊กอินที่มีการตั้งค่าเพื่อเลือกประเภทโพสต์และสถานะ
brasofilo

ฉันสงสัยว่าเป็นเพราะ WPML ใช้เพื่อจัดการเว็บไซต์สองภาษาและฉันมี 2 โพสต์ (cpt) เป็นหลัก นั่นเป็นเหตุผลที่บางครั้งฉันเห็นฟองว่า 2 ซึ่งมี 1 โพสต์ที่รอดำเนินการจริง เพราะโพสต์ทั้งสองประสานสถานะของพวกเขา สวัสดีให้ฉันรู้เกี่ยวกับปลั๊กอินเมื่อคุณทำเสร็จแล้ว: D
Hassan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.