Wp_NAV_MENU中的新发布通知

时间:2012-05-24 作者:Mihai

By blog有一个标题菜单,其中包含指向“关于我们”、“帮助”、“联系我们”和“博客”等页面的不同链接。

“博客”链接实际上是一个带有自定义模板的页面,该模板显示我的“博客”类别中的所有帖子。

如果“博客”类别的帖子发布在last 24 hours.

我使用的主题是使用wp_nav_menu 用于在标题中显示菜单的功能。php。

有没有办法做到这一点?

1 个回复
SO网友:Stephen Harris

当发布帖子(在某些类别中,我使用ID为333的类别作为示例)时,我会存储一个生命周期为24小时的瞬态。无论何时发布后续帖子,如果24小时过去了,临时帖子已被删除,则更新或重新创建临时帖子。

逻辑

每当帖子从一种状态更改为发布(包括当前发布帖子的更新)帖子类型时transition_post_status 已启动。此操作传递旧状态、新状态和te post对象。联系到这一点,我们可以检查:

新状态为“发布”,旧状态为其他状态(即新发布的状态)。

  • 为“发布”类型,属于333类,如果是,则更新持续24小时的瞬态。

    add_action(\'transition_post_status\', \'wpse_maybe_update_new_post_transient\',10,2); 
    function wpse_maybe_update_new_post_transient($new_status, $old_status,$post){
    
        if( \'post\' != get_post_type($post) || !has_term( 333, \'category\', $post) ){
            return;
        }
    
        if( \'publish\' == $new_status && $new_status != $old_status &&  ){
            set_transient(\'wpse_post_published\', $post->ID, 60*60*24 );
        }
    }
    
    get_transient(\'wpse_post_published\') 只有在过去24小时内发布帖子后,才应返回内容。

    因此,在生成菜单时,我们可以检查临时菜单元素,并有条件地添加类new post published菜单元素。

    在本例中,我将类添加到的菜单元素对应于一个“category”术语(ID为333)。我在这里没有这样做,但您可以使用$arg 检查菜单是否也位于特定位置。

    add_filter( \'nav_menu_css_class\',\'wpse_maybe_add_new_post_class\',10,3);
    function wpse_maybe_add_new_post_class($classes, $item, $arg){
        if( \'taxonomy\' == $item->type && \'category\' == $item->object && 333 == $item->object_id ){
            if( get_transient(\'wpse_post_published\') ){
                $classes[] = \'new-post-published\';
            }
        }
        return $classes;
    }
    
    然后可以适当地设置元素的样式。同样的想法,可以使用其他过滤器插入额外的元素(例如。walker_nav_menu_start_el) 或者通过定制步行器。

    警告此方法的以下缺点是:

    如果发布了帖子,则不会观察到通过恢复到草稿状态或安排未来发布来“取消”发布,即暂时发布仍然存在,菜单仍将显示“新发布的帖子”使用上述方法可以轻松修复最后一点。前两个有点棘手,如果这两个问题,那么你应该在过去24小时内查询333类中最新发布的帖子。如果您找到它,请更新瞬态,使其在发布帖子24小时后过期。

    第二种方法更加稳健,但成本稍高。

  • 结束