Помогите выполнить шорткод вне почтовой области контента - PullRequest
3 голосов
/ 16 декабря 2010

Для начала я использую этот плагин

http://wordpress.org/extend/plugins/my-youtube-playlist/ и эта тема, www.press75.com/themes/on-demand/this-is-a-sample-video-post-4/

Мое намерение состоит в том, чтобы плейлист YouTube отображался в серой области темы, где в настоящее время отображается только 1 видео. я намеревался использовать поле для вставки кода Youtube для темы, где я мог бы поместить шорткод плагина и, следовательно, чтобы плагин создал плейлист, необходимый для публикации. Однако я не смог заставить плагин выполнять шорткод, если он НЕ помещен в область содержимого сообщения.

Тема создает видео-контейнер Div (серая область для видео) после публикации ссылки на видео или ввода кода вставки видео в соответствующее поле темы.

Я пробовал следующее

  • Жесткое кодирование [myyoutubeplaylist LO3n67BQvh0, WGOohBytKTU, iwY5o2fsG7Y, PyKNxUThW4E, 1cX4t5-YpHQ, SJ183htYl-8, eWwoHPrrJYY, bja2ttzGOFM] в один файл php поста, чтобы увидеть, подхватит ли его плагин. Неудачно. Он просто выводит шорткод на экран

  • Жесткое кодирование <?php echo do_shortcode('[myyoutubeplaylist LO3n67BQvh0, WGOohBytKTU, iwY5o2fsG7Y, PyKNxUThW4E, 1cX4t5-YpHQ, SJ183htYl-8, eWwoHPrrJYY, bja2ttzGOFM]'); ?>, чтобы посмотреть, подхватит ли оно. Неудачно. Он просто выводит шорткод на экран.

  • После того, как шаблон сбросит параметры шорткода в следующее:
    <?php echo do_shortcode( get_video($post->ID); ?>. Неудачно. Он просто выводит шорткод на экран

  • Повторение всего вышеперечисленного за пределами div контейнера видео, созданного темой

Я новичок в этой идее, поэтому любая помощь будет очень признательна

Ответы [ 5 ]

1 голос
/ 16 декабря 2010

Поместите это в ваш файл functions.php:

add_filter('widget_text', 'do_shortcode');

Затем используйте шорткод на боковой панели, как в основной области содержимого.

0 голосов
/ 28 февраля 2014

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

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

Мы начнемзарегистрировав новый шорткод для вывода видео по прямой ссылке на YouTube, такой как https://www.youtube.com/watch?v=eh7lp9umG2I, чтобы пользователям не приходилось выполнять разбор вручную (нам действительно нужен только последний параметр).

После этого нам нужно зарегистрировать фильтр.В этом случае, так как мы хотим извлечь это видео из содержимого и поместить его где-то еще, мы будем применять фильтр к «the_content».

Далее мы создадим функцию, чтобы убедиться, что мызахватите копию шорткода до того, как фильтр удалит его - просто оставьте все СУХОЙ.

Наконец, нам просто нужно вывести видео.

function your_shortcode_handler($atts)
{
    $url = $atts['video'];

    if (isset($url))
    {
        $type = 'application/x-shockwave-flash';
        $url  = str_replace("watch?v=", 'v/', $url);

        $obj  = "<object data='$url' type='$type'><param name='src' value='$url' /></object>"

        return $obj;
    }
}

add_shortcode('your_shortcode_name', 'your_shortcode_handler');

function your_shortcode_filter($content)
{
    $pattern = "/\[your_shortcode_name(.*?)\]/";

    $content = preg_replace($pattern, '', $content);

    return $content;
}

add_filter('the_content', 'your_shortcode_filter');

function stealFromContent($content)
{
    $pattern = "/\[your_shortcode_name(.*?)\]/";
    $match = null;

    preg_match($pattern, $content, $match);

    if (is_array($match) and $match[0] != '')
    {
        return $match[0];
    }

    return '';
}

//somewhere in the template you're wanting to add the video to
//BEFORE the_content is called.
$youtube_video = stealFromContent();

//then

echo $youtube_video; //wherever you want it.

Теперь ответим на вопрос автора.Выбранный тип человека, который написал этот плагин, не использует шорткод.Он выполняет регулярное выражение для the_content, подобное тому, что я делал выше, а затем передает эти значения в библиотеку javascript.

Когда вызывается do_shortcode, он анализирует все шорткоды и игнорирует значения, не относящиеся к шорткоду.Хорошей подсказкой было то, что предоставленный вами шорткод просто не является шорткодом - [пространство слов слово пространство] недопустимо.

Исходный файл для справки.

0 голосов
/ 12 апреля 2012
<?php echo myYoutubePlaylist('[myyoutubeplaylist WnY59mDJ1gg, bKwQ_zeRwEs]'); ?>
0 голосов
/ 16 декабря 2010

или попробуйте это - TubePress

Вы можете закодировать его в свою тему несколькими способами, и вы можете легко редактировать его внешний вид с помощью CSS ...

edit: как встроить короткий код tubepress за пределами поста / страницы (мне кажется, что некоторые из них идут с pro-версией tho)

0 голосов
/ 16 декабря 2010

Почему бы вам не попробовать этот плагин?

http://wordpress.org/extend/plugins/smart-youtube/

...