2016-02-14 1 views
0

Я пытаюсь выяснить, как извлечь пары атрибутов значений из короткого кода. Ясно, что я забочусь только об атрибутах, которые есть и что пользователь ввел.пытается извлечь значения из короткого кода с помощью функции mainpressress. Нет кубиков

У меня есть гвоздь с регулярным выражением, но мне говорят (лаконичным пользователем SO), что я должен это сделать с помощью встроенной функции wordpress shortcode_atts, которая описана here.

Однако для жизни я не могу заставить его вернуть значения.

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

$defaults_atts = array(
        'width' => 640, 
        'height' => 360, 
        'mp4' => '', 
        'autoplay' => '', 
        'poster' => '', 
        'src'  => '', 
        'loop'  => '', 
        'preload' => 'metadata', 
        'webm' => '' 
      ); 
      $rest = substr($post->post_content, 0, -8); // remove the closing [/video] 
      $videoattr = shortcode_atts($defaults_atts , $rest, 'video'); 

обратите внимание, что я использую $post->post_content, поскольку все сообщение содержит это шорткод для видео. Я только удаляю закрывающий тег shortcode, который мне не нужен. (Прежде чем вы скажете, что это неправильно, я старался не делать этого, и ничего не меняет.) Штрипток в post_content обычно содержит атрибуты от ширины и высоты до исходных файлов, mp4 или webm. В простом случае, это может выглядеть следующим образом:

[video width="1080" height="1920" webm="http://path/file.webm" autoplay="true"][/video] 

Теперь, когда я проверяю выше с print_r($videoattr) все, что я получаю массив со значениями по умолчанию.

Что я делаю неправильно?

Вот еще тестирования, терпит неудачу, следуя предложению:

Сначала я изменить функцию my_shortcode:

function my_shortcode($atts=array(), $content=null) { 
     $attribute = shortcode_atts(array(
        'width' => '640', 
        'height' => '360', 
        'mp4' => '', 
        'autoplay' => '', 
        'poster' => '', 
        'src'  => '', 
        'loop'  => '', 
        'preload' => 'metadata', 
        'webm' => '', 
      ), $atts); 

    /*echo '<pre>', print_r($attribute, 1),'</pre>';*/ 
    echo '<pre>', print_r($atts, 1),'</pre>'; 
    /*echo '<pre>', print_r($content, 1),'</pre>';*/ 
} 

тогда я зову его, используя ... что у меня есть, что POST_CONTENT.

my_shortcode($post->post_content); 

Это возвращает, как $ atts, тот же самый короткий код, который я первоначально подал в функцию.

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

+0

Вы можете опубликовать всю функцию кода короткого кода? он выглядит не так – silver

+0

... после этого ничего больше. Все, что у него есть, это глобальный вызов '$ post' и' $ posts'. Я жду, чтобы реализовать больше в тот момент, когда получаю правильные значения в 'print_r'. Это функция, вызываемая во время цикла, которую я использую для извлечения URL-адреса опубликованного видео, чтобы использовать его на домашней странице в fancybox. (если это имеет смысл) – nico

ответ

1

атрибутов, которые проходят на шорткоде хранится в $ АЦА переменного, или первый аргумент в вашей функции

, чтобы дать вам идею, вот как это работает,

позволяет сказать, что у вас есть шорткод как этот

[mys hello="world" print="no"]Content[/mys]

и вашей функции PHP выглядит так,

function my_shortcode($atts=array(), $content=null) { 
    $attribute = shortcode_atts(array(
     'that' => 'is', 
     'this' => 'no', 
    ), $atts); 
    echo '<pre>', print_r($attribute, 1),'</pre>'; 
    echo '<pre>', print_r($atts, 1),'</pre>'; 
    echo '<pre>', print_r($content, 1),'</pre>'; 
} 

выход будет

#echo '<pre>', print_r($attribute, 1),'</pre>'; 
Array (
    [that] => is 
    [this] => no 
) 
#echo '<pre>', print_r($atts, 1),'</pre>'; 
Array (
    [hello] => world 
    [print] => no 
) 
#echo '<pre>', print_r($content, 1),'</pre>'; 
Content 

$attribute это атрибуты по умолчанию переходят в функции,

$atts - атрибуты, присвоенные и найденные на SHORTCODE тег, он будет переопределить значения по умолчанию, если ключевые матчи,

$content - содержание, заключенное в короткий код,

+0

Я не понимаю, почему мне так трудно понять, но ... может ли '$ atts' быть полным кодом, включая скобки? потому что иначе я должен самостоятельно извлечь атрибуты, мне не нужна эта функция :) – nico

+0

не уверен, что так сложно, но на основе вашего короткого кода вы можете легко извлечь его значение, '' ' $ atts ['width'] '' 'значение width -''' $ atts ['height']' '' значение высоты - '' '$ atts ['webm']' '' значение webm '' '$ atts ['autoplay']' '' значение автоматического воспроизведения – silver

+0

... когда я пытаюсь это сделать, получаю значения по умолчанию, а не значения, введенные пользователем в коротком коде. Это целая головоломка <= трудное слово, чтобы чувствовать себя менее глупо – nico