2016-02-13 3 views
-1

Привет я получаю эту ошибку Недействительный аргумент для Еогеасп() на этом цикле ниже, я получаю две ошибкиЕогеасп() Недопустимый аргумент

Предупреждение: Неверный аргумент поставляются для Еогеасп() в/главная/ххх /xx.php в строке 36

Предупреждение: невозможно изменить информацию заголовка - заголовки, уже отправленные (вывод запущен на /home/xxx/xx.php:36) в /home/xxx/xx.php в строке 100 {«статус»: «успех», «счет»: 0, «данные»: []}

<?php 
require('../../../../wp-blog-header.php'); 
header("HTTP/1.1 200 OK"); 
//$condition = isset($_REQUEST['condition']) ? $_REQUEST['condition'] : ''; 
//$condition = str_replace('\\','',$condition); 
//$condition = '{"id":200,"items":[{"size":"m","color":"green"}]}'; 
$condition = isset($_REQUEST['condition'])? stripslashes($_REQUEST['condition']) : ''; 
$search_condition = json_decode($condition,true); 
/* 
$search_condition = array(
'id'=>194, 
'items'=>array(
    array(
     'size'=>'xl', 
     'color'=>'blue', 
    ), 
) 
); 
*/ 


$id = $search_condition['id']; 
$items= $search_condition['items']; 

$condition_pair =array(); 
global $wpdb; 
$table_posts = $wpdb->prefix . 'posts'; 
$table_post_meta = $wpdb->prefix . 'postmeta'; 
$string = 'product-'.$id.'-variation'; 
$posts = $wpdb->get_results("select * from $table_posts WHERE post_name LIKE '%$string%' "); 

//echo "select * from $table_posts p INNER JOIN $table_post_meta pm ON pm.post_id = p.ID WHERE p.post_name LIKE '%$string%'";exit; 

$extra_attribute_records = get_post_meta($id, '_product_attributes', TRUE); 
$attribute_names = array(); 
foreach($extra_attribute_records as $key => $value) 
{ 
$attribute_names[] = $key; 

} 

$list_product = array(); 
$i= 0; 
foreach($posts as $post) 
{ 
    $image_url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID)); 

$price = get_post_meta($post->ID, '_regular_price', TRUE); 
$promotion = get_post_meta($post->ID, '_sale_price', TRUE); 
$weight = get_post_meta($post->ID, '_weight', TRUE); 
$height = get_post_meta($post->ID, '_height', TRUE); 
$width = get_post_meta($post->ID, '_width', TRUE); 
$length = get_post_meta($post->ID, '_length', TRUE); 
$quantity = get_post_meta($post->ID, '_stock', TRUE); 
$quantity = (int)$quantity; 
$sku = get_post_meta($post->ID, '_sku', TRUE); 
$stock_status = get_post_meta($post->ID, '_stock_status', TRUE); 

$extra_attribute_records = array(); 
foreach($attribute_names as $att_name) 
{ 
    $extra_attribute_records[$att_name] = strtolower(get_post_meta($post->ID, 'attribute_'.$att_name, TRUE)); 
} 

if(in_array($extra_attribute_records,$items)) 
{ 

    $title = get_the_title($id).' '.strtoupper(implode('/', $extra_attribute_records)).''; 
    $arr = array(
     'id' => $post->ID, 
     'title' => $title, 
     'description' => get_post_field('post_content', $id), 
     'excerpt' => get_post_field('post_excerpt', $id), 
     'price' => $price, 
     'currency' => get_woocommerce_currency(), 
     'weight' => $weight, 
     'sku' => $sku, 
     'quantity' => $quantity, 
     'featured' => 0, 
     'mark_as_new' => $post->mark_as_new, 
     'width' => $width, 
     'height' => $height, 
     'length' => $length, 
     'sort_order' => $post->sort_order, 
     'promotion_price'=>(int)$promotion, 
     'thumbnail' => $image_url[0], 
     'category_slug'=>$post->slug, 
     'extra_attributes' => array(),//'$extra_attribute_records, 
     'categories'=>get_the_product_category(), 
     'stock_status'=>$stock_status, 
     'post_date' => $post->post_date, 
    ); 
    $list_product[] = $arr; 
    $i++; 
} 

} 


header('Content-type: text/json'); 
echo json_encode(
array(
    "status" => "success", 
    'count' => $i, 
    "data" => $list_product, 
)); 
exit(); 

В чем проблема?

+0

Пожалуйста, сообщите сообщение об ошибке _full_ ... – arkascha

+0

Только первое, то есть второе, является просто продолжением. – arkascha

+1

И, пожалуйста, сообщите нам, что делает 'get_post_meta()', поэтому опубликуйте его код. Благодарю. – arkascha

ответ

2

Чтобы устранить проблему, пожалуйста, установите 3-й параметр в методе get_post_meta() в FALSE. Необязательно вы можете удалить третий параметр вообще, поскольку значение defualt также является FALSE. Теперь вы должны вернуть массив. См https://developer.wordpress.org/reference/functions/get_post_meta/

Замените следующую строку в примере:

$extra_attribute_records = get_post_meta($id, '_product_attributes', TRUE); 

С помощью этой строки кода:

$extra_attribute_records = get_post_meta($id, '_product_attributes', FALSE); 

Чтобы предотвратить «Предупреждение: неверный аргумент, поставляемый для Еогеасп()» ошибка из если по какой-либо причине вы не хотите, чтобы массив возвращался, добавьте if-элемент вокруг вашего цикла foreach, чтобы проверить, что $extra_attribute_records содержит массив.

if(is_array($extra_attribute_records)){ 
    foreach($extra_attribute_records as $key => $value) { 
     $attribute_names[] = $key; 
    } 
} 

Ошибка PHP «Предупреждение: неверный аргумент поставляется для Еогеаспа()» является выводится на страницу, которая является причиной, почему ваши заголовки уже отправлены к тому времени, вы получите «заголовок (" Content-Type : text/json '); ". Исправление вышеупомянутой проблемы должно с радостью разрешить вам отправлять заголовок Content-type.

+0

Это попытка исправить симптом, а не причину. – arkascha

+0

Я не мог принять решение о причине, поскольку проблема лежит в методе 'get_post_meta()', для которого нам не был предоставлен код. –

+0

Тогда, возможно, вам не следовало бы размещать «ответ», так как это не отвечает на вопрос? – arkascha

Смежные вопросы