2017-09-05 2 views
3

Je suis venu à quelques problèmes. J'ai fait un plugin wordpress, qui obtient automatiquement le plus de 20 posts Instagram récents, puis, en théorie, il devrait me permettre d'insérer la nouvelle image en tant que shortcode dans le post. Maintenant, le code de reproduire c'est:PHP erreur crash code

//define Access token 
$accesst= "PUT YOUR INSTAGRAM ACCESS TOKEN HERE"; 
//userid 
$userid= YOUR INSTAGRAM USER ID HERE; 
//image count to get 
$count=20; 
//get api contents 
$content = file_get_contents('https://api.instagram.com/v1/users/self/media/recent/?access_token='.$accesst.'&count='.$count); 
//converting JSON to object 
$standardres = json_decode($content, true); 
//array method 
foreach($standardres['data'] as $photo) { 
    $imageData = base64_encode(file_get_contents($photo['images']['standard_resolution']['url'])); 
    $images[] = '<img src="data:image/jpeg;base64,' . $imageData . '" />'; 
} 



//create functions for shortcodes 
function fone($images){ 
    return $images[0]; //naudok tik [one] 
} 
//shortcodes 
add_shortcode('one', 'fone'); 
?> 

Fondamentalement, je reçois un message d'erreur affiche:

Notice: Uninitialized string offset: 0 in D:\XEMP\htdocs\xd\wordpress\wp-content\plugins\insta-live\insta-live.php on line 29 

Toute idée comment résoudre ce problème? Un var_dump() me donne les images au-dessus de l'en-tête .. Et s'il vous plaît ne me pointez pas vers le fil de décalage de chaîne unitiliazed, parce que je ne le vois pas vraiment comme le même problème.

+0

Quelque chose est envoyé vide. – clearshot66

+0

qui est la ligne 29 – Juan

+0

return $ images [0]; - Ceci est la ligne 29 –

Répondre

1

Je ne l'ai pas utilisé WordPress pendant un certain temps, mais $images semble hors de portée. J'essaierais peut-être d'encapsuler votre travail API et de le référencer dans la fonction shortcode, quelque chose comme ci-dessous. Je recherche les meilleures pratiques sur ce genre de chose en rapport avec WordPress:

if(!class_exists('MyAPI')) { 
    class MyAPI 
    { 
     # Create an image storage 
     protected static $imgs; 
     # Access your API 
     public function callInstagram($accesst = 'PUT YOUR INSTAGRAM ACCESS TOKEN HERE',$userid = 'YOUR INSTAGRAM USER ID HERE') 
     { 
      # If you have already set it with content, return it 
      if(!empty(self::$imgs['instagram'])) 
       return self::$imgs['instagram']; 
      //image count to get 
      $count = 20; 
      //get api contents 
      $content = file_get_contents('https://api.instagram.com/v1/users/self/media/recent/?access_token='.$accesst.'&count='.$count); 
      //converting JSON to object 
      $standardres = json_decode($content, true); 
      //array method 
      foreach($standardres['data'] as $photo) { 
       $imageData = base64_encode(file_get_contents($photo['images']['standard_resolution']['url'])); 
       $images[] = '<img src="data:image/jpeg;base64,' . $imageData . '" />'; 
      } 
      # Set the instagram images store 
      if(!empty($images)) 
       # Assign 
       self::$imgs['instagram'] = $images; 
      # Return the images if set 
      return (isset(self::$imgs['instagram']))? self::$imgs['instagram'] : false; 
     } 
     # Return the images 
     public function getInstagramImg($img = false) 
     { 
      $imgs = $this->callInstagram(); 
      if($img !== false) 
       return (isset($imgs[$img]))? $imgs[$img] : false; 
      # Return all 
      return $imgs; 
     } 
    } 
} 

//create functions for shortcodes 
function fone() 
{ 
    # Create API instance 
    $Instagram = new MyAPI(); 
    # Send back the first image in the list 
    return $Instagram->getInstagramImg('0'); 
} 
//shortcodes 
add_shortcode('one', 'fone'); 

Une dernière note, je suppose que votre travail API est correcte, vous devez vérifier que cela fonctionne avant de commencer à aller tout fou en essayant de comprendre pourquoi le $images ne fonctionne pas. Utilisez print_r() pour voir si elle renvoie l'information correcte d'Instagram.

0

Il semblerait que vous ayez un problème avec l'entrée entrant dans la fonction fone() qui déclenche cette erreur.

Essayez d'effectuer une vérification isset() dans cette fonction pour vous assurer que l'élément existe réellement avant de tenter de le renvoyer.

... Exemple

//create functions for shortcodes 
function fone($images){ 
    if (isset($images[0])) { 
     return $images[0]; //naudok tik [one] 
    } 
    return ''; 
} 
+0

Maintenant, je n'ai rien. –

+0

Ensuite, c'est certainement lié à la valeur de $ images. Cela indiquerait que vous passez un objet/tableau/chaîne vide dans cette fonction. Peut-être que si Instagram ne renvoie aucune donnée? – neuromatter

1

Initialisez $images avant de faire une boucle et d'ajouter des valeurs, d'autant plus que vous souhaitez le passer en paramètre. Avant la boucle foreach, ajouter:

$images = array(); 
0

Merci pour l'aide les gars, vérifier si vous voulez voir le code tout en état de fonctionnement:

<?php 
/* 
Plugin Name: Instagram Feed Embed 
Description: Embed a live photo to wordpress posts from your feed 
Version: 0.1.0 
Author: Jacob Stankaitis 
Author URL: https://www.upwork.com/freelancers/~017e31b991d3d0f253 
*/ 
//define Access token 
$accesst= "PUT_YOUR_ACCESS_TOKEN_HERE"; 
//userid 
$userid= PUT_YOUR_USER_ID_HERE; 
//image count to get 
$count=20; 
//get api contents 
$content = file_get_contents('https://api.instagram.com/v1/users/self/media/recent/?access_token='.$accesst.'&count='.$count); 
//converting JSON to object 
$standardres = json_decode($content, true); 
//array method 
$images= array(); 
foreach($standardres['data'] as $photo) { 
    $imageData = base64_encode(file_get_contents($photo['images']['standard_resolution']['url'])); 
    array_push ($images, '<img src="data:image/jpeg;base64,' . $imageData . '" />'); 
} 

//create functions for shortcodes with definition 
function fone(){ 
    global $images; 
    return ($images[0]); 
} 
function ftwo(){ 
global $images; 
return $images[1]; 
} 
function fthree(){ 
    global $images; 
return $images [2]; 

} 
function ffour(){ 
    global $images; 
return $images [3]; 
} 
function ffive(){ 
    global $images; 
return $images [4]; 
} 
function fsix(){ 
    global $images; 
return $images [5]; 
} 
function fseven(){ 
    global $images; 
return $images [6]; 
} 
function feight(){ 
    global $images; 
return $images [7]; 
} 
function fnine(){ 
    global $images; 
return $images [8]; 
} 
function ften(){ 
    global $images; 
return $images[9]; 
} 
function feleven(){ 
    global $images; 
return $images [10]; 
} 
function ftwelve(){ 
    global $images; 
return $images [11]; 
} 
function fthirteen(){ 
    global $images; 
return $images[12]; 
} 
function ffourteen(){ 
    global $images; 
return $images [13]; 
} 
function ffifteen(){ 
    global $images; 
return $images [14]; 
} 
function fsixteen(){ 
    global $images; 
return $images [15]; 
} 
function fseventeen(){ 
    global $images; 
return $images [16]; 
} 
function feighteen(){ 
    global $images; 
return $images [17]; 
} 
function fnineteen(){ 
    global $images; 
return $images [18]; 
} 
function ftwenty(){ 
    global $images; 
return $images [19]; 
} 

//create shortcode 
add_shortcode('one', 'fone'); 
add_shortcode('two', 'ftwo'); 
add_shortcode('three', 'fthree'); 
add_shortcode('four', 'ffour'); 
add_shortcode('five', 'ffive'); 
add_shortcode('six', 'fsix'); 
add_shortcode('seven', 'fseven'); 
add_shortcode('eight', 'feight'); 
add_shortcode('nine', 'fnine'); 
add_shortcode('ten', 'ften'); 
add_shortcode('eleven', 'feleven'); 
add_shortcode('twelve', 'ftwelve'); 
add_shortcode('thirteen', 'fthirteen'); 
add_shortcode('fourteen' , 'ffourteen'); 
add_shortcode('fifteen', 'ffifteen'); 
add_shortcode('sixteen', 'fsixteen'); 
add_shortcode('seventeen', 'fseventeen'); 
add_shortcode('eighteen', 'feighteen'); 
add_shortcode('nineteen', 'fnineteen'); 
add_shortcode('twenty', 'ftwenty'); 

?> 

Si vous souhaitez utiliser, vous Vous êtes libre de le faire, il suffit de remplacer le "PUT_YOUR_ACCESS_TOKEN_HERE" et "PUT_YOUR_USER_ID_HERE" avec votre jeton d'accès Instagram et votre identifiant d'utilisateur!