Go Back   CodingForums.com > :: Server side development > PHP

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 01-20-2013, 07:06 AM   PM User | #1
operapixie
Regular Coder

 
Join Date: Nov 2011
Posts: 129
Thanks: 11
Thanked 0 Times in 0 Posts
operapixie can only hope to improve
Question error after making changes to a wordpress plugin

Hi there,
I'm using the recipress plugin for a client website that's nearly completed. I've posted yesterday on their forums as well, but haven't gotten any response and it looks like most folks aren't getting timely responses. So I thought I'd ask for some assistance over here.

Basically, the client asked to have the heading "Instructions" changed to "Prescription". I know I could have just changed the language file, but this client isn't very saavy and would have gotten generally confused in the admin area as well so I figured I'd change all instances of "instruction/instructions" and "Instruction/Instructions" in all files. For the most part, everything came out great. The script displays fine and everything. But I'm getting two errors and I don't know how to solve them (I can occasionally figure out how to write my own snippet, but I am no programmer).

Following are the error messages I'm getting:

Warning: Invalid argument supplied for foreach() in /path/wp-content/plugins/recipress/php/functions.php on line 240

Warning: Invalid argument supplied for foreach() in /path/wp-content/plugins/recipress/php/functions.php on line 288

And the two referenced lines of code are identical:

PHP Code:
foreach($prescriptions as $prescription) { 
http://dev.yourbusybee.com/kaleco2/new-mama/ is one such example of a page this error appears on.

Any help would by hugely appreciated.

Thanks in advance.

~Laura

Last edited by operapixie; 01-20-2013 at 07:08 AM.. Reason: forgot to include website link
operapixie is offline   Reply With Quote
Old 01-20-2013, 05:03 PM   PM User | #2
sunfighter
Senior Coder

 
Join Date: Jan 2011
Location: Missouri
Posts: 2,387
Thanks: 18
Thanked 350 Times in 349 Posts
sunfighter is on a distinguished road
foreach($prescriptions as $prescription) { is OK so it must be someplace else in the code.
sunfighter is offline   Reply With Quote
Old 01-20-2013, 07:19 PM   PM User | #3
operapixie
Regular Coder

 
Join Date: Nov 2011
Posts: 129
Thanks: 11
Thanked 0 Times in 0 Posts
operapixie can only hope to improve
Ok. But that's what's on the rows it's saying the errors are in. How would I figure out where else the error would be coming from.
operapixie is offline   Reply With Quote
Old 01-21-2013, 04:12 PM   PM User | #4
sunfighter
Senior Coder

 
Join Date: Jan 2011
Location: Missouri
Posts: 2,387
Thanks: 18
Thanked 350 Times in 349 Posts
sunfighter is on a distinguished road
Post your code
sunfighter is offline   Reply With Quote
Old 01-21-2013, 05:10 PM   PM User | #5
operapixie
Regular Coder

 
Join Date: Nov 2011
Posts: 129
Thanks: 11
Thanked 0 Times in 0 Posts
operapixie can only hope to improve
I'm sorry, I don't know what part of the code to post. There are a bunch of files associated with this plugin. Do you just want all the code from the referenced file?
operapixie is offline   Reply With Quote
Old 01-21-2013, 11:18 PM   PM User | #6
sunfighter
Senior Coder

 
Join Date: Jan 2011
Location: Missouri
Posts: 2,387
Thanks: 18
Thanked 350 Times in 349 Posts
sunfighter is on a distinguished road
First thing to check is right from the manual:
foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable.

What things should look like:
PHP Code:
<?php
$prescriptions 
= array('step one''step two''step three''step four');
reset($prescriptions);  // TO MAKE SURE THE ARRAY IS POINTING AT FIRST ELEMENT

foreach ($prescriptions as $prescription) {
    echo 
"Next Value: $prescription<br />\n";
}
?>
Is $prescriptions an array? Is it an object?
sunfighter is offline   Reply With Quote
Old 01-21-2013, 11:28 PM   PM User | #7
AndrewGSW
Senior Coder

 
Join Date: Apr 2011
Location: London, England
Posts: 2,120
Thanks: 15
Thanked 354 Times in 353 Posts
AndrewGSW will become famous soon enough
Sorry, but from the manual:

Quote:
When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.
reset() is only required if you have used next() or some other method to move the internal pointer.
__________________
"I'm here to save your life. But if I'm going to do that, I'll need total uninanonynymity." Me Myself & Irene.
Validate your HTML and CSS
AndrewGSW is offline   Reply With Quote
Old 01-22-2013, 01:30 AM   PM User | #8
Inigoesdr
Super Moderator


 
Inigoesdr's Avatar
 
Join Date: Mar 2007
Location: Florida, USA
Posts: 3,601
Thanks: 2
Thanked 397 Times in 390 Posts
Inigoesdr is a jewel in the roughInigoesdr is a jewel in the roughInigoesdr is a jewel in the rough
Quote:
Originally Posted by operapixie View Post
Ok. But that's what's on the rows it's saying the errors are in. How would I figure out where else the error would be coming from.
That error means the first argument, $prescriptions, that you are passing to foreach() loop is supposed to be an array, but it isn't. If you dump the $prescriptions variable before the foreach() loop you'll see what the actual value is:
PHP Code:
var_dump($prescriptions); 
Inigoesdr is offline   Reply With Quote
Old 01-22-2013, 10:01 PM   PM User | #9
operapixie
Regular Coder

 
Join Date: Nov 2011
Posts: 129
Thanks: 11
Thanked 0 Times in 0 Posts
operapixie can only hope to improve
Since I really and truly have no clue what portion of the code I would need to post, I'm going to assume that you need to see the entire "function.php" file contents in order to help me here. The above comments, I'm sure, should make loads of sense if I really knew php at a slightly higher level, but alas I'm still a beginner with it. Hopefully someone will be able to see what the problem is by looking at this?

I should note that I finally HAVE an entry with "Prescriptions" in it, and they do not appear on the page:

Here

PHP Code:
<?php

// add to an array
function recipress_array_insert($arr1$key$arr2$before false) {
    
$index array_search($keyarray_keys($arr1));
    
    if(
$index === FALSE)
        
$index count($arr1);
    else
        if(!
$before)
            
$index++;

    
$end array_splice($arr1$index);
    return 
array_merge($arr1$arr2$end);
}

// remove from an array
function recipress_array_remove() { 
    
$args func_get_args(); 
    
$array $args[0]; 
    
$keys array_slice($args,1); 
     
    foreach(
$array as $k=>$v) { 
        if(
in_array($k$keys)) 
            unset(
$array[$k]); 
    } 
    return 
$array


// hasRecipe
function has_recipress_recipe() {
    global 
$post;
    
$hasRecipe false;
    
$meta get_post_meta($post->ID'hasRecipe'true);
    if(
$meta == 'Yes'$hasRecipe true;
    return 
$hasRecipe;
}

// post type
function recipress_post_type() {
    
$type recipress_options('post_type') ? recipress_options('post_type') : 'post';
    
    return 
$type;
}

// output
function recipress_output() {
    
// determine where to output
    
$output false;
    
$outputs recipress_options('output');
    if(!isset(
$outputs)) {
        if (
is_single()) {
            
$output true;
        }
    }
    else {
        if(
is_home() && in_array('home'$outputs)) $output true;
        if(
is_single() && in_array('single'$outputs)) $output true;
        if(
is_archive() && in_array('archive'$outputs)) $output true;
        if(
is_search() && in_array('search'$outputs)) $output true;
    }
    return 
$output;
}

// recipress_theme
function recipress_theme() {
    
$theme 'recipress-light';
    
$theme_settings recipress_options('theme');
    if(isset(
$theme_settings)) $theme $theme_settings;
    return 
$theme;
}

// recipress_gen_summary
function recipress_gen_summary() {
   
$excerpt get_the_content();
   
$excerpt strip_tags(trim($excerpt));
   
$new_excerpt '';
   
$charlength 140;
   if(
strlen($excerpt)>$charlength) {
       
$subex substr($excerpt,0,$charlength-5);
       
$exwords explode(" ",$subex);
       
$excut = -(strlen($exwords[count($exwords)-1]));
       if(
$excut<0) {
            
$new_excerpt .= substr($subex,0,$excut);
       } else {
               
$new_excerpt .= $subex;
       }
       
$new_excerpt .= "&hellip;";
   } else {
       
$new_excerpt .= $excerpt;
   }
   return 
$new_excerpt;
}

// recipress_add_photo
function recipress_add_photo() {
    
$add_photo false;
    if(!
current_theme_supports('post-thumbnails') || (current_theme_supports('post-thumbnails') && recipress_options('use_photo') == 'no'))
        
$add_photo true;
    return 
$add_photo;
}

// recipress_use_taxonomies
function recipress_use_taxonomies() {
    
$taxonomies = array('cuisine''course''skill_level');
    
$set_taxonomies recipress_options('taxonomies');
    if(
$set_taxonomies !=''$taxonomies $set_taxonomies;
    return 
$taxonomies;
}

// recipress_time
function recipress_time($minutes$attr null) {
    if (
$minutes != '') {
        
$time '';
        
$hours '';
        if(
$minutes 60) {
            
$hours floor($minutes 60);
            
$minutes $minutes floor($minutes/60) * 60;
        }
        if (
$attr == 'iso') {
            
$time $hours.':'.$minutes;
            
$time strtotime($time);
            if (
$hours != '' $time 'PT'.$hours.'H'.$minutes.'M';
            else 
$time 'PT'.$minutes.'M';
        } else {
            
$h __('hrs''recipress');
            
$m __('mins''recipress');
            if(
$hours 2$h __('hr''recipress');
            if(
$minutes 02$m __('min''recipress');
            if (
$hours != '' $time $hours.' '.$h.' '.$minutes.' '.$m;
            else 
$time $minutes.' '.$m;
        }     
    return 
$time;
    }
}

// function for outputting recipe items
// ----------------------------------------------------
function recipress_recipe($field$attr null) {
    global 
$post;
    
$meta get_post_custom($post->ID);
    
    switch(
$field) {
        
// title
        
case 'title':
            
$title get_the_title().' '.__('Recipe''recipress');
            
$recipe_title $meta['title'][0];
            if(
$recipe_title$title $recipe_title;
            return 
$title;
        break;
        
        
// photo
        
case 'photo':
            if(
current_theme_supports('post-thumbnails') && recipress_options('use_photo') != 'no'
                
$photo get_the_post_thumbnail($post->ID'thumbnail'$attr);
            else {
                
$photo_id $meta['photo'][0];
                
$photo wp_get_attachment_image($photo_id'thumbnail'false$attr);
            }
            return 
$photo;
        break;
        
        
// summary
        
case 'summary':
            return 
$meta['summary'][0];
        break;
            
        
        
// cuisine
        
case 'cuisine':
            
$cuisine get_the_term_list$post->ID'cuisine'$attr);
            return 
$cuisine;
        break;
        
        
// course
        
case 'course':
            
$course get_the_term_list$post->ID'course'$attr);
            return 
$course;
        break;
        
        
// skill_level
        
case 'skill_level':
            
$skill_level get_the_term_list$post->ID'skill_level'$attr);
            return 
$skill_level;
        break;
        
        
// prep_time
        
case 'prep_time':
            
$prep_time $meta['prep_time'][0];
            
$prep_time recipress_time($prep_time$attr);
            return 
$prep_time;
        break;
        
        
// cook_time
        
case 'cook_time':
            
$cook_time $meta['cook_time'][0];
            
$cook_time recipress_time($cook_time$attr);
            return 
$cook_time;
        break;
        
        
// ready_time
        
case 'ready_time':
            
$prep_time $meta['prep_time'][0];
            
$cook_time $meta['cook_time'][0];
            
$other_time $meta['other_time'][0];
            
$ready_time $prep_time $cook_time $other_time;
            
$ready_time recipress_time($ready_time$attr);
            return 
$ready_time;
        break;
        
        
// yield
        
case 'yield':
            
$yield $meta['yield'][0];
            
$servings $meta['servings'][0];
            if(
$yield && $servings$yield $yield.' ('.$servings.' '.__('Servings''recipress').')';
            if(!
$yield && $servings$yield $servings.' '.__('Servings''recipress');
            return 
$yield;
        break;
        
        
// cost
        
case 'cost':
            
$cost $meta['cost'][0];
            return 
$cost;
        break;
        
        
// ingredients
        
case 'ingredients':
            
$ingredients $meta['ingredient'];
            foreach(
$ingredients as $ingredient) {
                
$ingredients unserialize($ingredient);
            }    
            
$output $ingredients;
            
            return 
$output;
        break;
        
        
// prescriptions
        
case 'prescriptions':
            
$prescriptions $meta['prescription'];
            foreach(
$prescriptions as $prescription) {
                
$prescription unserialize($prescription);
            }
            
$output $prescriptions;
            
            return 
$output;
        break;
        
        default:
            return 
$meta[$field][0];
    } 
// end switch
    
}

// recipress_ingredients_list
function recipress_ingredients_list() {
    
$ingredients recipress_recipe('ingredients');
    
$output '<ul class="ingredients">';
    foreach(
$ingredients as $ingredient) {
        
$amount $ingredient['amount'];
        
$measurement $ingredient['measurement'];
        
$the_ingredient $ingredient['ingredient'];
        
$notes $ingredient['notes'];
        
        if(!
$ingredient['ingredient']) continue;
        
        
$output .= '<li class="ingredient">';
        if (isset(
$amount) || isset($measurement)) 
            
$output .= '<span class="amount">'.$amount.' '.$measurement.'</span> ';
        if (isset(
$the_ingredient))
            
$term get_term_by('name'$the_ingredient'ingredient');
            
$output .= '<span class="name">';
            if (!empty(
$term)) $output .= '<a href="'.get_term_link($term->slug'ingredient').'">';
            
$output .= $the_ingredient;
            if (!empty(
$term)) $output .= '</a>';
            
$output .= '</span> ';
        if (isset(
$notes)) 
            
$output .= '<i class="notes">'.$notes.'</i></li>';
    }
    
$output .= '</ul>';
    
    return 
$output;
}

// recipress_prescriptions_list
function recipress_prescriptions_list() {
    
$prescriptions recipress_recipe('prescriptions');
    
$output '<ol class="prescriptions">';
    foreach(
$prescriptions as $prescription) {
        
$size recipress_options('prescription_image_size');
        if (!isset(
$size)) $size 'large';
        
$image $prescription['image'] != '' wp_get_attachment_image($prescription['image'], $sizefalse, array('class' => 'align-'.$size)) : '';
        
        
$output .= '<li>';
        if (
$size == 'thumbnail' || $size == 'medium'
            
$output .= $image;
        
$output .= $prescription['description'];
        if (
$size == 'large' || $size == 'full'
            
$output .= '<br />'.$image;
        
$output .= '</li>';
    }
    
$output .= '</ol>';
    
    return 
$output;
}

// recipress_credit
function recipress_credit() {
    
$credit recipress_options('credit');
    if(isset(
$credit) && $credit == 1)
        return 
'<p class="recipress_credit"><a href="http://www.recipress.com" target="_target">WordPress Recipe Plugin</a> by ReciPress</p>';
}


?>

Last edited by operapixie; 01-23-2013 at 12:04 AM.. Reason: Further info.
operapixie is offline   Reply With Quote
Old 01-23-2013, 02:32 PM   PM User | #10
sunfighter
Senior Coder

 
Join Date: Jan 2011
Location: Missouri
Posts: 2,387
Thanks: 18
Thanked 350 Times in 349 Posts
sunfighter is on a distinguished road
This is a guess. After line 240 you have:
PHP Code:
foreach($prescriptions as $prescription) {
                
$prescription unserialize($prescription);
            }
            
$output $prescriptions;

            return 
$output;
        break; 
Change the line
PHP Code:
$prescription unserialize($prescription); 
To
PHP Code:
$prescriptions unserialize($prescription); 
Adding an s.
sunfighter is offline   Reply With Quote
Old 01-23-2013, 09:26 PM   PM User | #11
operapixie
Regular Coder

 
Join Date: Nov 2011
Posts: 129
Thanks: 11
Thanked 0 Times in 0 Posts
operapixie can only hope to improve
Thank you awfully much. I have somehow solved the issue, though I'm not really sure how. It seems that the recipress plugin doesn't save data to the database or something. When I changed "Instructions" to "Prescriptions", and even searched for the same in PHPMyAdmin, any I had entered were gone. When I re-entered them, the errors disappear. Surely it would be better to have an if/then statement so that if there ARE no "Prescriptions", nothing appears at all. Aw well. I'll work on that later I suppose.

Thank you all for taking a look at things.
operapixie is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 07:39 PM.


Advertisement
Log in to turn off these ads.