web-dev-qa-db-ja.com

どうすればこのエラーを修正できますか:警告:foreach()に無効な引数が指定されていますか?

私は最近、ワードプレスのインストールを自分のローカルインスタンスから開発サーバーに移しました。移動のために、私はwordpress 3.4のクリーンバージョンをインストールし、ファイル構造の正確な複製を移動し、そして投稿を持ち込むためにインポート/エクスポート機能を使用しました。

それから私は中に入り、必要なウィジェットと設定を設定しました。私はこれを100回やったことがありますが、この問題は一度もありませんでした。これがエラーです。

警告/ home/content/46/9411746/html/dev/wp-admin/include/plugin.php内の1285foreach()に無効な引数が指定されています

管理メニューにのみ表示されます。ウィジェットを追加したり、設定を変更したり、メニューを操作したり、投稿のメタデータを更新しようとしたときに表示されます。管理メニューの至るところにポップアップ表示されます。

これはincludes/plugin.phpのエラーを引き起こす関数です。

function remove_menu_page( $menu_slug ) {
global $menu;

foreach ( $menu as $i => $item ) {
    if ( $menu_slug == $item[2] ) {
        unset( $menu[$i] );
        return $item;
    }
}

return false;
}

私は外観>メニューを使用していて、functions.phpにここに2つ登録しています

add_action( 'init', 'register_my_menus' );

function register_my_menus() {
register_nav_menus(
    array(
      'header-nav' => __( 'Main Header Navigation', 'kyosay' ),
      'footer-nav' => __( 'Footer Navigation', 'kyosay' )
    )
);
}

私はいくつかのメニュー項目を並べ替え、私のクライアントが必要としない他のものを排除して、管理者パネルの他のカスタマイズをしています。関連があると思われる場合は、そのコードを含めることができます。

この問題はコアで引き起こされるので、それをどう修正するかについて迷っています。注:問題は私のローカルビルドでは起こりません。考えですか?

編集:参考のためにfunctions.phpからremove_menu_itemsコードを追加しました

function remove_menu_items() {
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
}
add_action( 'admin_init', 'remove_menu_items' );

更新:
この問題の原因としてのfunctions.phpを削除しました。それはAjaxイベント(新しいウィジェットのサイドバーへのドラッグ、メタボックスの更新など)で引き起こされるようです。アンインストールして再インストールし、それがまだ起こっているかどうかを確認します。それは私のローカルビルドにはまったく現れていません。

2
timshutes

これは通常あなたが管理ナビゲーションのことをやろうとしていて、あなたがadmin_menuに夢中になっていないときに起こります。それ以前にフックした場合、$menuはまだ作成されていません。

add_action('admin_menu', 'my_plugin_add_menu');

function my_plugin_add_menu(){
    $ptype = 'my_post_type';
    $ptype_obj = get_post_type_object( $ptype );
    add_submenu_page( 'my-menu-item', $ptype_obj->labels->name, $ptype_obj->labels->all_items, $ptype_obj->cap->edit_posts, "edit.php?post_type=$ptype" );
}
3
Tyler Carter

私はワードプレスで同様の問題を抱えていました、ちょうど次のように引数をチェックするためにifステートメントを追加しました

if(is_array($thearray)){
    //use $thearray here
}

そして警告は消えた!

0
Karibe