2016-01-06 60 views
1

我得到我的WordPress的仪表板下面的错误,其相关的一段代码我写的,但我不知道如何修复错误:WordPress的不确定指标问题PHP

Notice: Undefined index: draft in /home/sites/samskirrow.com/public_html/skizzar-test/wp-content/mu-plugins/skizzar-dashboard.php on line 331 

下面是它指的是代码:

/****************************************************************** 
/* REMOVE BRACKETS AROUND PAGE COUNTS 
/******************************************************************/ 
foreach(array('edit-post', 'edit-page', 'edit-movie', 'upload') as $hook) 
    add_filter("views_$hook" , 'wpse_30331_custom_view_count', 10, 1); 

function wpse_30331_custom_view_count($views) 
{ 
    global $current_screen; 
    switch($current_screen->id) 
    { 
     case 'edit-post': 
      $views = wpse_30331_manipulate_views('post', $views); 
      break; 
     case 'edit-page': 
      $views = wpse_30331_manipulate_views('page', $views); 
      break; 
     case 'edit-movie': 
      $views = wpse_30331_manipulate_views('movie', $views); 
      break; 
     case 'upload': 
      $views = wpse_30331_manipulate_views('attachment', $views); 
      break; 
    } 
    return $views; 
} 

function wpse_30331_manipulate_views($what, $views) 
{ 
    global $user_ID, $wpdb; 

    /* 
    * This is not working for me, 'artist' and 'administrator' are passing this condition (?) 
    */ 
    if (!current_user_can('artist')) 
     return $views; 

    /* 
    * This needs refining, and maybe a better method 
    * e.g. Attachments have completely different counts 
    */ 
    $total = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE (post_status = 'publish' OR post_status = 'draft' OR post_status = 'pending') AND (post_author = '$user_ID' AND post_type = '$what') "); 
    $publish = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_author = '$user_ID' AND post_type = '$what' "); 
    $draft = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'draft' AND post_author = '$user_ID' AND post_type = '$what' "); 
    $pending = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'pending' AND post_author = '$user_ID' AND post_type = '$what' "); 
    $trash = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'trash' AND post_author = '$user_ID' AND post_type = '$what' "); 

    /* 
    * Only tested with Posts/Pages 
    * - there are moments where Draft and Pending shouldn't return any value 
    */ 
    $views['all'] = preg_replace('/\(.+\)/U', ''.$total.'', $views['all']); 
    $views['publish'] = preg_replace('/\(.+\)/U', ''.$publish.'', $views['publish']); 
    $views['draft'] = preg_replace('/\(.+\)/U', ''.$draft.'', $views['draft']); 
    $views['pending'] = preg_replace('/\(.+\)/U', ''.$pending.'', $views['pending']); 
    $views['trash'] = preg_replace('/\(.+\)/U', ''.$trash.'', $views['trash']); 

    return $views; 
} 

我知道,问题是,某些参数不是在数据库中(例如,可能没有任何“待定”的帖子),所以它抛出一个错误。例如,如果参数存在,我该如何编码?

此处的目标是从wordpress中的帖子数中删除'('''')括号。因此,当您在视图帖子或查看页面屏幕上时,在帖子/页面列表的上方有一个子菜单,其中包含以下项目:'all','published','trash','pending' - 这些是过滤器用户可以点击。每个过滤器旁边都有一个数字,即该过滤器中的帖子/页数。这个计数的格式是([NUMBER]) - 这个代码是简单地去掉那些括号。

+4

[PHP:“通知:未定义变量”和“通知:未定义指数”]的可能的复制(HTTP:/ /stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index) –

+0

我不明白这段代码应该做什么 - 你可以添加一些关于目标的更多细节你正在努力实现? – vard

+0

@vard - 我已将我的目标添加到我的描述 –

回答

2

中,我注意到通过google'ing了一下,你正在使用的代码形式this Wordpress SE answer值“草稿”。这与您的需求不符,因为此代码在OP处理一些操作后重新计算帖子数。

只删除括号,看看下面的功能类WP-列表table.php

public function views() { 
    $views = $this->get_views(); 
    $views = apply_filters("views_{$this->screen->id}", $views); 
    if (empty($views)) 
     return; 
    $this->screen->render_screen_reader_content('heading_views'); 
    echo "<ul class='subsubsub'>\n"; 
    foreach ($views as $class => $view) { 
     $views[ $class ] = "\t<li class='$class'>$view"; 
    } 
    echo implode(" |</li>\n", $views) . "</li>\n"; 
    echo "</ul>"; 
} 

这是建立你试图改变用户菜单功能。如果你看一下这个近,你会看到$view是echo'ed来自$views被过滤以前:

$views = apply_filters("views_{$this->screen->id}", $views) 

$this->screen->id立场当前屏幕的ID,如edit-post例如。

所以加入这个简单的过滤器,你会实现你想在这里做什么:

add_filter('views_edit-post', 'remove_count_parenthesis', 10, 1); 
function remove_count_parenthesis($views) { 
    foreach($views as $key => $view) { 
     $views[$key] = str_replace(array('(', ')'), '', $view); 
    } 
    return $views; 
} 
+0

这是伟大的@vard - 虽然我得到一个语法错误语法错误,意外的';' (在foreach语句中指$ view后面的';') –

+1

啊我忘记了一个右括号,看到更新后的代码 – vard

+0

这是非常好的答案,谢谢 –

1

你需要检查是否有您的阵列

if (isset($views['draft'])) { 
$views['draft'] = preg_replace('/\(.+\)/U', ''.$draft.'', $views['draft']); 
} 
+0

这是沿着正确的路线,我确实希望检查变量是否存在,但是,此代码返回致命错误:调用未定义函数issset() –

+0

它isset (两个s)我编辑了答案 - 这应该工作 - 你应该把所有的代码都包含在一个类似的检查中,或者如果你正在重复代码,请考虑一个循环 –

+0

是isset而不是issset ..谢谢@ SimonPollard .. – scaisEdge