WordPress - Как я могу получить счетчик всех новых сообщений, опубликованных с использованием куки - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь заставить его работать, я нашел этот фрагмент здесь в stackoverflow, и он работал очень хорошо, я сделал некоторые изменения, чтобы создать выпадающий список уведомлений со значком колокольчика, как показано наКартинка ниже из моего блога.

enter image description here

Этот код запускается один раз, когда публикуется новое сообщение, и если есть новое сообщение!удаляя старое уведомление, чтобы выдвинуть новое, как вы можете видеть на картинке, я получил только один счет (1), даже если опубликовано более одного сообщения.

Итак, как я могу остановить Cookies от удаления старых уведомлений, когда публикуется новое сообщение!

Как я могу сохранить их до истечения срока действия или нажатия на кнопку скрытия?

hide.notification.bar.js

jQuery(document).ready(function($) {

    $("#notification_hide_button").click(function(){
        $(this).hide();
        $(".notifications_bar").hide();

        if ($.cookie( 'hide_post_cookie' ) ) { 
            $.cookie( 'hide_post_cookie', null ) 
        }
        var post_id = parseInt( cookie_Data.post_id, 10 );

        $.cookie( 'hide_post_cookie', post_id, { expires: 2, path: '/' } );

    });

});

function.php> Проверка статуса записи.

add_action( 'transition_post_status', function ( $new_status, $old_status, $post )
{
    //Check if our post status then execute our code
    if ( $new_status == 'publish' && $old_status != 'publish' ) {
        if ( get_option( 'new_post_notification' ) !== false ) {

            // The option already exists, so we just update it.
            update_option( 'new_post_notification', $post );

        } else {

            add_option( 'new_post_notification', $post );

        }
    }

}, 10, 3 );

function.php> Получите new_post_notification и удерживайте ихс печеньем.

function get_new_post_notification_bar() {

    // Get the new_post_notification which holds the newest post
    $notification   = get_option( 'new_post_notification' );

    $counter = 1;

    // Get the post ID saved in the cookie
    $cookie_post_ID = isset( $_COOKIE['hide_post_cookie'] ) ? (int) $_COOKIE['hide_post_cookie'] : false; 

    $output = '';

    if( false != $notification ) {

        //First check if we have a cookie, if not, show the notification bar
        // If a cookie is set, do not display the notification bar
        if( false === $cookie_post_ID ) {

            //Get the post's gmt date. This can be changed to post_date
            $post_date = strtotime( $notification->post_date_gmt );

            //Get the current gmt time
            $todays_date = current_time( 'timestamp', true );

            //Set the expiry time to two days after the posts is published
            $expiry_date = strtotime( '+2 day', $post_date );

            //Show the notification bar if the expiry date is not yet reached
            if( $expiry_date > $todays_date ) { 

                $output .= '<a id="notification_hide_button">';
                $output .= '<div class="notifications_bar">';
                $output .= "$counter";
                $output .= '</div>';
                $output .= '<i class="fa fa-bell" aria-hidden="true"></i>';
                $output .= '</a>';

            }

        }else{

            /**
             * If a cookie is set, check the cookie value against the post id set as last post
             * If the two don't match, delete the cookie and show the notification bar if a new post is published
             * This code only run once, that is when a cookie is still set, and new post is published within the time
             * in which the cookie is still set
            */ 
            if( (int) $notification->ID !== $cookie_post_ID ) {

                ?>
                    <script>
                        jQuery(document).ready(function($) {

                            $.removeCookie('hide_post_cookie', { path: '/' });

                        });
                    </script>
                <?php

                $output .= '<a id="notification_hide_button">';
                $output .= '<div class="notifications_bar">';
                $output .= "$counter";
                $output .= '</div>';
                $output .= '<i class="fa fa-bell" aria-hidden="true"></i>';
                $output .= '</a>';
            }

        }   

    }
    $counter ++;
    return $output;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...