web-dev-qa-db-ja.com

未定義のオフセット:1067行目の> [...] /wp-includes/capabilities.php

ちょっと私は私のlocalhostセットアップでこのエラーメッセージを得るが、それはGenesis Frameworkが有効になっているときにだけ。 WordPressのTwenty Elevenは正常に動作します。これは私が新しい投稿を作成したいときに起こります。ページを更新するとエラーが繰り返されますが、投稿自体が作成され、すべてうまくいくようです。

誰がこれを引き起こすのか知っていますか?

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

新しくインストールされた、変更されていないGenesis Frameworkです。

8
James Mitch

創世記にバグが見つかりました。

あなたのXdebugスタックトレースは、 genesis_save_custom_fields() を単数の機能(edit_postとedit_page)で呼び出すcurrent_user_can()関数として犯人を指名します。

current_user_can()has_cap()を呼び出し、これは map_meta_cap() を呼び出します。これはケーパビリティ名のswitchステートメントを実行します。 capabilities.phpの 行1067を参照してください 。 2つの未定義のオフセット通知は$ args [0]からのものです。これは、Post IDがGenesisのcurrent_user_can呼び出しに含まれていないため、配列ではありません。

Cannot modify header information - headers already sent警告はXdebugからのPHP通知の出力です。実際にXdebugを使用していない場合は、ログを確認しない限りPHP通知は表示されません。エラーはsave_postに添付された関数にあり、ページが更新されるためWP_DEBUGをtrueに設定してもページに表示されない。

修正:

Lib/functions/options.phpの234行目で、次のように変更されます。

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

edit_pageedit_postのキャップは互換性があるため、post_typeをチェックする必要もありません。

12
Chris_O

これは、Mark Jaquithによる監査で1.17にトランクで修正されました。 1.9.2リリースのチケットを提出しました。

個人的には、map_meta_cap()は$ args [0]をチェックまたはサニタイズしないので、これはWordPressの問題であると思います。そのため、私は ticket をWordPressコアに送信しました。

0
Travis Smith