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é.
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.
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.
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.