Offset indefinido: 0 em […] /wp-includes/capabilities.php na linha 1067

8

Ei, recebo essas mensagens de erro na configuração do meu localhost, mas apenas com o Genesis Framework ativado; WordPress Twenty Eleven funciona bem. Isso acontece quando eu quero criar uma nova postagem. Se eu atualizar a página, o erro será repetido, mas a postagem em si será criada e tudo parecerá bem.

Alguém sabe o que causa isso?

Notice: Undefined offset: 0 in /var/www/secret/htdocs/wp-includes/capabilities.php on line 1067
Notice: Undefined offset: 0 in /var/www/secret/htdocs/wp-includes/capabilities.php on line 1067
Warning: Cannot modify header information - headers already sent by (output started at /var/www/secret/htdocs/wp-includes/capabilities.php:1067) in /var/www/secret/htdocs/wp-includes/pluggable.php on line 876

É um novo Genesis Framework, não modificado.

    
por James Mitch 28.01.2013 / 21:24

2 respostas

12

Você encontrou um bug no Gênesis.

Seus dedos de rastreamento de pilha Xdebug são os culpados como a função genesis_save_custom_fields() que chama current_user_can() com uma capacidade única ( edit_post e edit_page) que também requer um argumento adicional, neste caso o ID do post que está faltando.

current_user_can() chamadas has_cap() que chama map_meta_cap() que faz uma instrução switch no nome da capacidade. Veja a linha 1067 de capabilities.php . Os 2 avisos de offset indefinidos são de $ args [0] que não é um array porque o ID do post está faltando na chamada current_user_can no Genesis.

O aviso Cannot modify header information - headers already sent é do Xdebug que imprime os avisos do PHP. De fato, se você não estivesse usando o Xdebug, nem sequer veria os avisos do PHP, a menos que tenha verificado seus logs porque o erro está em uma função anexada a save_post e a página é atualizada, o que impede que avisos / erros sejam exibidos na página. mesmo com WP_DEBUG definido como verdadeiro.

Correção:

Na linha 234 da lib / functions / options.php altere:

/** Check the user allowed to edit the post or page */
if ( ( 'page' == $post->post_type && ! current_user_can( 'edit_page' ) ) || ! current_user_can( 'edit_post' ) )
    return;

Para:

/** Check the user allowed to edit the post or page */
if ( ! current_user_can( 'edit_post', $post->ID ) )
    return;

Observe também que não há necessidade de verificar o post_type porque os limites edit_page e edit_post são intercambiáveis.

    
por Chris_O 02.02.2013 / 12:38
0

Isso foi corrigido no trunk em 1.17 por Mark Jaquith em sua auditoria. Eu enviei um ticket para uma possível versão 1.9.2.

Pessoalmente, acredito que isso seja um problema do WordPress, já que map_meta_cap () não verifica ou higieniza $ args [0]. Então, eu enviei um ticket para o núcleo do WordPress como resultado.

    
por Travis Smith 04.02.2013 / 04:12