web-dev-qa-db-fra.com

Décalage non défini: in> [...] /wp-includes/capabilities.php à la ligne 1067

Bonjour, je reçois ce message d’erreur sur la configuration de mon hôte localhost, mais uniquement lorsque Genesis Framework est activé; WordPress Twenty Eleven fonctionne bien. Cela se produit lorsque je veux créer un nouveau message. Si j'actualise la page, l'erreur se répète, mais le message lui-même est créé et tout semble aller pour le mieux.

Est-ce que quelqu'un sait ce qui cause cela?

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

C'est un framework Genesis récemment installé et non modifié.

8
James Mitch

Vous avez trouvé un bug dans Genesis.

Votre pile Xdebug trace le coupable avec la fonction genesis_save_custom_fields() qui appelle current_user_can() avec une capacité singulière (edit_post et edit_page) qui nécessite également un argument supplémentaire, dans ce cas l’ID de publication manquant.

current_user_can() appelle has_cap() qui appelle map_meta_cap() qui effectue une instruction switch sur le nom de la capacité. Voir ligne 1067 de capacités.php . Les 2 avis de décalage indéfinis sont issus de $ args [0], qui n'est pas un tableau car l'ID de publication est absent de l'appel current_user_can de Genesis.

Les avertissements Cannot modify header information - headers already sent proviennent de Xdebug qui imprime les avis PHP. En fait, si vous n'utilisiez pas Xdebug, vous ne verriez même pas les avis PHP à moins de vérifier vos journaux car l'erreur est liée à une fonction attachée à save_post et la page est actualisée, ce qui empêche les avertissements/avertissements/erreurs. d'être affiché sur la page même avec WP_DEBUG défini sur true.

Réparer:

Sur la ligne 234 de lib/functions/options.php change:

/** 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;

À:

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

Il est également à noter qu'il n'est pas nécessaire de vérifier le type de post_type car les majuscules edit_page et edit_post sont interchangeables.

12
Chris_O

Cela a été corrigé dans le coffre à 1.17 par Mark Jaquith lors de son audit. J'ai soumis un ticket pour une éventuelle version 1.9.2.

Personnellement, j’estime qu’il s’agit d’un problème lié à WordPress puisque map_meta_cap () ne vérifie pas et ne désinfecte pas $ args [0]. J'ai donc envoyé un ticket au noyau WordPress.

0
Travis Smith