Помістіть міхур, що нагадує оновлення, у декілька меню CPT для відкладених елементів


9

Так само, як у пунктах меню «Плагіни» або «Коментарі» ці сповіщення про кількість в пуфіку для оновлень і немодерованих коментарів відповідно, я хотів би використовувати цей міхур для відображення кількості CPT, які мають статус «очікує на перегляд». Як далі робити це?

Я знайшов цю нитку , але не зовсім впевнений, куди піти звідти.

Це було б акуратно; як мені потрібна ця функція на сайті, який використовує створений користувачем вміст (користувацькі типи публікацій). Щоразу, коли користувачі надсилають нову CPT, її статус встановлюється на "Очікує на розгляд", і я хочу, щоб адміністратори сайту швидко переглядали меню, щоб побачити, скільки елементів потребує їх уваги.

EDIT: У мене зараз цей код:

// 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.


Відповідь у вашому посиланні пояснює це досить добре, ви б замість цього зберегли відкладені предмети тимчасово для вашого випадку, який код у вас є?
Вік

Перевірте і цього іншого . Але, так, будь ласка, спробуйте поекспериментувати з кодом і опублікувати тут своє власне розслідування;)
brasofilo

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

О так, це працює! Чомусь бульбашки зникають, коли натискаю відповідний пункт меню CPT, але вони з’являються знову, коли я перебуваю на інших ділянках в wp-admin. Не буду цим займатися, проблема вирішена.
Хассан

У моєму тестовому середовищі бульбашки не зникають, смішна помилка, яку ви там потрапили ... Мені подобається ця штука :) і загорнуть її всередину плагіна з налаштуваннями для вибору типів публікацій та статусу.
brasofilo

Я підозрюю, що це через WPML. Використовуючи його для управління двомовним веб-сайтом, і я по суті маю 2 версії кожної публікації (CPT). Тому я іноді бачу міхур, який говорить 2, де насправді є 1 відкладений пост; тому що обидва посади синхронізують свої статуси. Гей, дайте мені знати про плагін, коли ви закінчите: D
Хассан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.