如何使用Dashboard_Glance_Items挂钩使帖子和评论不可点击

时间:2014-08-24 作者:chap

我有一个多作者网站,我已经使用了一些挂钩来阻止他们查看其他作者的帖子和媒体。现在,在“概览”部分的Wordpress仪表板中,它向他们显示了全部帖子和评论。他们现在可以点击他们,我希望他们不能这样做。

所以,我找到了一个针对这个的钩子,虽然我才刚刚开始学习如何使用钩子进行定制,所以我需要一些帮助。下面是我现在所拥有的,只是回显当前用户的ID以验证它是正确的钩子:

add_filter(\'dashboard_glance_items\', \'make_unclickable\');

function make_unclickable( $items = array() ) {
    global $current_user;
    echo $current_user->ID;

    return $items;
}
那么,如何才能使链接不可访问?

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

这个dashboard_glance_items 过滤器仅在修改额外图元时有用。已显示帖子/评论数据元素。

以下是三个想法:

方法#1-使用dashboard_glance_items 过滤器:

您可以使用以下过滤器设置,从wp_dashboard_right_now().

诀窍很简单,WordPress认为没有帖子/评论/页面。

这里有一个实现(我相信我可以进一步改进):

add_action( \'do_meta_boxes\', \'custom_do_meta_boxes\', 99, 2 );

function custom_do_meta_boxes( $screen, $place )
{
    if( \'dashboard\' === $screen && \'normal\' === $place )
    {   
        add_filter( \'wp_count_posts\', \'custom_wp_count_posts\' );
        add_filter( \'wp_count_comments\', \'custom_wp_count_comments\' );
    }
}

function custom_wp_count_posts( $stats )
{
    static $filter_posts = 0;
    if( 1 === $filter_posts )
        remove_filter( current_filter(), __FUNCTION__ );

    $filter_posts++;
    return null;
}

function custom_wp_count_comments( $stats )
{
    static $filter_comments = 0;
    if( 1 === $filter_comments )
        remove_filter( current_filter(), __FUNCTION__ );

    $filter_comments++;
    return array( \'total_comments\' => 0 );
}
然后,您可以通过dashboard_glance_items 滤器

方法#2-重用wp_dashboard_right_now() 输出:

这里有一个黑客,我们现在删除当前的小部件,然后添加另一个自定义小部件:

/**
 * Replace the \'Right Now\' dashboard widget with our own.
 */

add_action(\'wp_dashboard_setup\',                               
    function()
    {
        // Remove the current \'Right Now\' dashboard widget:
        remove_meta_box(
           \'dashboard_right_now\', 
           \'dashboard\', 
           \'normal\'  
        );

        // Add our \'Custom Right Now\' dashboard widget:
        add_meta_box(
           \'custom_wp_dashboard_right_now\',
           __( \'Custom Right Now\' ),
           \'custom_wp_dashboard_right_now\', 
           \'dashboard\', 
           \'normal\', 
        );

    }
);   
其中,我们的简单演示回调是:

function custom_wp_dashboard_right_now()
{
        // Let wp_dashboard_right_now() do all the hard work:
        ob_start();
        wp_dashboard_right_now();
        $html = ob_get_contents();                                  
        ob_end_clean();

        // Modify the output.

        // Simple example where all links are stripped out:
        echo strip_tags( $html, \'<p><div><span><ul><ol><li>\' );
}
这里我们使用输出缓冲来捕获wp_dashboard_right_now() 然后替换其中的所有链接。

这只是一个简单的例子。您可能需要使用preg_replace() 仅针对帖子/评论项目。

您还可以从wp_dashboard_right_now() 要在中使用的核心函数custom_wp_dashboard_right_now() 回调。

方法#3-CSS/Javascript我们还可以通过CSS/Javascript修改这些链接。但我把实现留给您;-)

我希望你能根据自己的需要修改一下。

SO网友:Waseem Abu Senjer

遗憾的是,没有可删除或编辑的“筛选器”previous “概览”框中的项目。

EDIT

我删除了“Wordpress核心黑客”部分,因为我不想鼓励这样的行为,我也不想每次Wordpress发布新版本时都编辑代码:)

下面是一段代码,可以在不可单击的情况下附加自定义帖子类型统计信息:

add_filter(\'dashboard_glance_items\', \'make_unclickable\');

function make_unclickable( $items  ) {

 $post_types = array( \'post_type_1\', \'post_type_2\' );

foreach( $post_types as $type ) {

    if( ! post_type_exists( $type ) ) continue;

    $num_posts = wp_count_posts( $type );

    if( $num_posts ) {

        $published = intval( $num_posts->publish );
        $post_type = get_post_type_object( $type );

        $text = _n( \'%s \' . $post_type->labels->singular_name, \'%s \' . $post_type->labels->name, $published, \'your_textdomain\' );
        $text = sprintf( $text, number_format_i18n( $published ) );



            $items[] = sprintf( \'<span class="%1$s-count">%2$s</span>\', $type, $text ) . "\\n";

    }
}

return $items;
 }

结束

相关推荐

Adding custom Bulk Actions

我一直在寻找将自定义批量操作添加到类别页面的方法。他们中的大多数人说,不可能用干净的方式来做这件事,因为这件事没有挂钩。大多数解决方案包括在客户端使用JS通过DOM操作添加选项。虽然这是可行的,但它仍然是一个相当丑陋的解决方案。我读过的大多数文章都是2年前的,所以我一直在想,从那时起到现在,这个问题已经添加了一个新的挂钩或解决方案,以便对这个问题有一个更及时的解决方案。