Invalid argument supplied for foreach()

Úvodní stránka Fórum podpory WordPressu Problémy s WordPressem Invalid argument supplied for foreach()

Zvolené téma obsahuje celkem 4 odpovědi. Do diskuze (2 účastníci) se naposledy zapojil uživatel  Karlinho a poslední změna je stará 5 let, 6 měsíců.

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (z celkem 5)
  • Autor
    Příspěvky
  • #18516

    Karlinho
    Participant
    Web

    Zdravím, na šabloně Diamond mi vypíše při editaci článku či menu tuto chybovou hlášku:

    
    Warning: Invalid argument supplied for foreach() in /data/web/virtuals/60538/virtual/www/wp-content/themes/diamond/functions.php on line 1143
    
    Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/60538/virtual/www/wp-content/themes/diamond/functions.php:1143) in /data/web/virtuals/60538/virtual/www/wp-admin/post.php on line 235
    
    Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/60538/virtual/www/wp-content/themes/diamond/functions.php:1143) in /data/web/virtuals/60538/virtual/www/wp-includes/pluggable.php on line 1121

    Daný řádek 1443 odkazuje na:

    add_action( 'save_post', 'save_woocommerce_attr_to_meta' );
    
    function save_woocommerce_attr_to_meta( $post_id ) {
    
            // Get the attribute_names .. For each element get the index and the name of the attribute
    
            // Then use the index to get the corresponding submitted value from the attribute_values array.
    
    	foreach ( $_REQUEST['attribute_names'] as $index => $value ) {
    
    		update_post_meta( $post_id, $value, $_REQUEST['attribute_values'][$index] );
    
    	}
    
    }

    Co je na tom kódu chybného?

    #18525

    admin
    Keymaster
    Web

    Problém je v tom, že $_REQUEST['attribute_names'] nabývá nějakých hodnot pouze u produktů. A použitá funkce se spouští při ukládání každého typu příspěvku. Takže je potřeba tam přidat nějakou podmínku, buď na existenci proměnné nebo přímo kontrolu vlastního typu obsahu (produkt).

    Související téma je zde.

    #18534

    Karlinho
    Participant
    Web

    Díky za objasnění, zkoušel jsem hledat, jestli s tím neměl někdo problém a šikovně to nevyřešil, jelikož to asi sám nezvládnu, a zarazilo mne, že na to nejspíš neupozorňuje nikdo, kdo to dělal podle stejného návodu: http://www.galalaly.me/index.php/2013/05/woocommerce-sort-by-custom-attributes/ nebo http://robustastudio.com/sort-woocommerce-products-custom-attributes/.

    Jak to co nejjednodušeji vyřešit?

    #18536

    admin
    Keymaster
    Web

    Celou funkci pro cyklus

    foreach ( $_REQUEST['attribute_names'] as $index => $value ) {
      update_post_meta( $post_id, $value, $_REQUEST['attribute_values'][$index] );
    }

    bych asi zkusil obalit podmínkou

    if ( isset( $_REQUEST['attribute_names'] ) && !empty( $_REQUEST['attribute_names'] ) ) {
      foreach ( $_REQUEST['attribute_names'] as $index => $value ) {
        update_post_meta( $post_id, $value, $_REQUEST['attribute_values'][$index] );
      }
    }

    Netestováno. Ostatní uživatelé se s tím nemuseli vůbec setkat, pokud nemají na serveru zapnuté hlášení PHP chyb (error_reporting) nebo WP_DEBUG. Na ostré verzi webu se tato direktiva kvůli podobných chybám často vypíná…

    #18540

    Karlinho
    Participant
    Web

    Funguje, děkuji moc.

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (z celkem 5)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.