如何检查页面加载后是否发布了新帖子?

时间:2014-09-03 作者:henrywright

我的目标是使用Heartbeat API检查博客主页加载后是否发布了新帖子。如果发布了新帖子,我会在屏幕顶部显示一个链接“16篇新帖子”,单击该链接后,会将新帖子插入DOM。

My problem:

如何检查博客主页加载后是否发布了新帖子?

My PHP so far:

function new_post_check( $response, $data, $screen_id ) {

    // Do some processing here.

    // Respond.
    return $response;
}
add_filter( \'heartbeat_received\', \'new_post_check\', 10, 3 );
add_filter( \'heartbeat_nopriv_received\', \'new_post_check\', 10, 3 );

My script so far:

$( document ).on( \'heartbeat-tick.poll\', function( event, data ) {
    // Print data to the console.
    console.log( data );
});

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

确定当前时间current_time() 核心中的函数,允许传递三个不同的值作为第一个参数和gmt (偏移量)作为第二个参数。关于1号:

  1. mysql -&燃气轮机;gmdate( \'Y-m-d H:i:s\' ), 可读性强,例如2004/07/8 13:35:19

  2. timestamp -&燃气轮机;time(), UNIX时间戳,例如。1335939007

    一个自定义参数,它是PHPs的有效格式字符串date() 作用

    例如:。D, d M Y H:i:s

    现在,我们将继续

    $now = current_time( \'mysql\' );
    
    要不是,请立即获取UNIX时间戳,因为WP_Query 需要一些东西,她可以使用strtotime().

    查询较新的帖子,然后我们将使用date_query 带有的子句after 查询比现在晚的帖子。我使用fields 参数,以减少对数据库的影响。这意味着,结果将只用于检查是否有更新的帖子,并且只获取ID,而不是整行。

    $newer_posts_IDs = new WP_Query( array(
        \'post_type\'  => \'post\',
        \'fields\'     => \'ids\',
        \'date_query\' => array(
            \'after\' => current_time( \'mysql\' ),
        ),
    ) );
    
    。。。然后$newer_posts_IDs->found_posts 将保留查询的帖子数量。

    从这里到哪里去

    您认为是什么;“已完成”;由你决定。您可以将上述查询/检查添加到类似jQuery的内容中( document ).ready() 事件,将其添加到shutdown 胡克或任何你喜欢的东西。

    最后,您需要使用一整套行重复上述查询,通过. 搜索through my answers on that topic.

    您可能希望将它们插入DOM中的特定点,并在那里添加一个空容器作为占位符。jQuery提供了.before() API函数,以防您已经收到帖子。否则您可能只会使用.html() 插入您的内容。

SO网友:aifrim

首先,你需要给他发出滴答声的日期:

// Hook into the heartbeat-send and give him the milliseconds timestamp since epoch
$(document).on(\'heartbeat-send\', function(e, data) {
    data[\'now\'] = new Date().getTime();
});
我们已经准备好了场地,现在让我们倾听心跳的时刻:

$(document).on(\'heartbeat-tick\', function(e, data) {
    alert(data);
});
现在是php部分:

$then = 0;
function my_heartbeat($response, $data)
{
    global $then;

    $then = date("Y-m-d H:i:s", $data[\'then\']);

    add_filter(\'posts_where\', \'filter_where_date\');

    $query = new WP_Query(array(\'post_type\' => \'post\'));        
    $response[\'number\'] = $query->found_posts;

    remove_filter(\'posts_where\', \'filter_where_date\');

    return $response;
}
add_filter(\'heartbeat_received\', \'my_heartbeat\', 10, 3);

function filter_where($where = \'\')
{
    global $then;

    $where .= " AND post_date >= {$then} AND post_date < NOW()";
    return $where;
}
希望这有帮助。

结束