보류중인 항목에 대한 여러 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

@Wyck 질문을 업데이트했습니다.
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 때문인 것 같습니다. 이중 언어 웹 사이트를 관리하는 데 사용하고 기본적으로 모든 게시물 (cpt)의 2 가지 버전이 있습니다. 그렇기 때문에 실제로 대기중인 게시물이 1 개있는 경우 2라는 말이 표시되는 것을 볼 수 있습니다. 두 게시물의 상태가 동기화되기 때문입니다. 이봐, 당신이 끝나면 플러그인에 대해 알려주세요 : D
Hassan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.