Как напрямую вызвать функцию шорткода и передать $atts
Я использую плагин Категории медиабиблиотек . В нем не так много документации, поэтому я пришел к выводу, что для его реализации будет использоваться шорткод [mediacategories categories="6"]
.
Я хочу реализовать это непосредственно в шаблоне темы. Поэтому я попробовал:
<?php if(function_exists(do_shortcode('[mediacategories categories="6"]'))) { ?>
<h1>Inspiration</h1>
<?php
do_shortcode('[mediacategories categories="6"]');
}
Я также попытался реализовать функцию напрямую, но не смог правильно передать $atts, чтобы функция их использовала.
2 answers
do_shortcode()
просто анализирует строку. Вы должны использовать echo
или print
, чтобы распечатать его.
function_exists()
ожидает строку, соответствующую имени функции. Посмотрев на плагин, я бы попробовал этот код:
<?php
if ( function_exists( 'mediacategories_func' ) )
{
?>
<h1>Inspiration</h1>
<?php
print mediacategories_func( array( 'categories' => 6 ) );
}
Обычно я добавляю такой раздел в свои обратные вызовы с коротким кодом:
if (is_array($atts)) {
extract(shortcode_atts(array(
'primary_att' => 'primary_default',
...
), $atts));
} else {
$primary_att = $atts;
}
Это позволяет вам передавать "первичный" атрибут (заменять primary_att
тем, что называется вашим первичным атрибутом) непосредственно в функцию, не заключая его в array...in в вашем случае это могут быть "категории", и тогда вы могли бы назвать это как mediacategories_func(6);
.