Переменная доступа определена в функции вне этой функции

Во-первых: я знаю, что об этом уже спрашивали, но я просмотрел много вопросов/ответов и не могу понять, как заставить любой из них работать. Так что извините за это.

Итак, в основном я пишу некоторые функции/шорткоды в Wordpress, которые означают, что я могу использовать шорткод для публикации видео Vine в блоге Wordpress:

function embedVine($atts) {

    extract(shortcode_atts(array(
        "id" => ''
    ), $atts));

    $vine_id = $id;

   // I'm then doing a whole load of stuff involving $vine_id, including using it as a parameter to pass to different functions I've written that are separate to this function.
  // I should also mention that $vine_id is the id on the end of a Vine URL.
} add_shortcode("vine", "embedVine");

Затем пользователь может использовать шорткод [vine id="..."] в редакторе Wordpress.

Затем у меня есть функция, которую я написал, но я не хочу выполнять ее внутри функции выше, иначе она будет запускаться каждый раз, когда запускается функция/шорткод, что было бы нехорошо. Вместо этого мне нужно выполнить его вне функции, но по-прежнему использовать $vine_id в качестве параметра для нее. Однако, поскольку $vine_id был определен внутри функции выше, я не могу получить к нему доступ вне функции.

Вот вторая функция:

function vineThumb($id) {
    $vine = file_get_contents("http://vine.co/v/{$id}");
    return $vine;
    // of course, it's a lot more complicated than this but for the sake of this, it works.
} vineThumb($vine_id);

Выполнение функции вернет http://vine.co/v/{$vine_id}. Как мне сделать функцию $vine_id доступной за пределами функции шорткода (первой)?

Надеюсь, я объяснил это достаточно ясно, я не PHP-программист, как вы, вероятно, заметили, но я знаю достаточно, чтобы обойтись. Хотя этот вид поставил меня в тупик. Спасибо за любую помощь :)


person Tom Oakley    schedule 25.01.2014    source источник


Ответы (1)


Я не знаю, находятся ли эти две функции в одном файле, но попробуйте это. http://www.php.net/manual/en/language.variables.scope.php

$vine_id = null; //Define it outside the function

function embedVine($atts) {

    global $vine_id; //Refers to $vine_id outside the function

    extract(shortcode_atts(array(
        "id" => ''
    ), $atts));

    $vine_id = $id; //$vine_id now has the value of $id when embedVine exits
} add_shortcode("vine", "embedVine");
person Justin Paul Paño    schedule 25.01.2014
comment
К сожалению, похоже, это не работает :( спасибо за вашу помощь :) Я думаю, что мне нужно как-то вернуть $vine_id в результате функции, доступной для моей вторичной функции. Хотя не знаю, как это сделать :/ - person Tom Oakley; 25.01.2014