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