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á 9 let, 12 měsíců.
-
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?
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.
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?
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á…
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.
WordPress – novinky, návody a zajímavosti