WordPress — PHP ошибка сбой кода

Я пришел к некоторым проблемам. Я создал плагин для WordPress, который автоматически получает последние 20 постов в Instagram, а затем, теоретически, должен позволить мне вставить новейшее изображение в качестве шорткода в пост.
Теперь код для воспроизведения это:

//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');
?>

В основном я получаю сообщение об ошибке:

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

Есть идеи как решить это? var_dump() дает мне изображения над заголовком. И, пожалуйста, не указывайте мне на поток смещенных строк, потому что я не вижу в этом той же проблемы.

3

Решение

Я некоторое время не пользовался WordPress, но $images выглядит вне области видимости Возможно, я бы попытался обернуть вашу работу API и сослаться на нее внутри функции шорткода, как показано ниже. Я бы изучил лучшие практики по этому типу вещей, связанных с 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');

И последнее замечание: я предполагаю, что ваша работа с API корректна, вы должны сначала проверить, работает ли она, прежде чем начать сходить с ума, пытаясь выяснить, почему $images не работает использование print_r() чтобы увидеть, вернет ли он правильную информацию из Instagram.

1

Другие решения

инициализировать $images перед циклом и добавлением значений, особенно если вы хотите передать его в качестве параметра. Перед foreach цикл, добавьте:

$images = array();
1

Казалось бы, у вас есть проблема с входом в fone() функция, которая вызывает эту ошибку.

Попробуйте выполнить isset() проверьте в этой функции, чтобы убедиться, что элемент действительно существует, прежде чем пытаться вернуть его.

Пример…

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

Спасибо за помощь, ребята, проверьте, хотите ли вы увидеть весь код в рабочем состоянии:

<?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');

?>

Если вы хотите его использовать, вы можете это сделать, просто замените «PUT_YOUR_ACCESS_TOKEN_HERE» и «PUT_YOUR_USER_ID_HERE» на свой токен доступа в Instagram и свой идентификатор пользователя!

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector