web-dev-qa-db-fra.com

Comment corriger cette erreur: Avertissement: argument non valide fourni pour foreach ()?

J'ai récemment déplacé une installation wordpress de mon instance locale vers un serveur de développement. Pour le déménagement, j'ai installé une version propre de wordpress 3.4, déplacé des copies exactes du fichier structre et utilisé la fonction d'importation/exportation pour importer les publications.

Je suis ensuite entré et définir les widgets nécessaires, et les paramètres. Je l'ai fait 100 fois et je n'ai jamais eu ce problème. Voici l'erreur:

Avertissement : Argument non valide fourni pour foreach() dans /home/content/46/9411746/html/dev/wp-admin/includes/plugin.php on line 1285

Il n'apparaît que dans le menu admin. Je le vois lorsque j'essaie d'ajouter un widget, de modifier un paramètre, d'utiliser des menus ou de mettre à jour des métadonnées pour un message. Il apparaît partout dans le menu administrateur.

Voici la fonction déclenchant l'erreur dans 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;
}

J'utilise apparence> menus et j'en ai deux inscrits ici dans functions.php ici:

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' )
    )
);
}

J'effectue une autre personnalisation du panneau d'administration, en réorganisant certains éléments de menu et en éliminant d'autres éléments inutiles pour mes clients. Je peux inclure ce code si vous pensez que c'est pertinent.

Étant donné que ce problème est au cœur du processus, je ne sais pas comment le résoudre. REMARQUE: Le problème ne se produit pas sur ma version locale. Pensées?

Edit: ajout du code remove_menu_items de functions.php pour référence

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' );

Mettre à jour:
J'ai éliminé functions.php en tant que source de ce problème. Cela semble être déclenché lors d'événements Ajax (glisser un nouveau widget dans une barre latérale, mettre à jour une méta-boîte, etc. Je vais désinstaller, réinstaller et voir si cela se produit toujours. Cela pourrait-il avoir un lien avec l'hôte Web? (GoDaddy)? Il n'apparaît pas du tout sur ma construction locale.

2
timshutes

Cela se produit généralement lorsque vous essayez de faire de la navigation administrative sans être connecté à admin_menu. Si vous vous connectez auparavant, $menu n'a pas encore été créé.

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

J'ai eu un problème similaire avec wordpress, je viens d'ajouter une instruction if pour vérifier l'argument comme suit

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

et l'avertissement était parti !!

0
Karibe