Как напрямую вызвать функцию шорткода и передать $atts


Я использую плагин Категории медиабиблиотек . В нем не так много документации, поэтому я пришел к выводу, что для его реализации будет использоваться шорткод [mediacategories categories="6"].

Я хочу реализовать это непосредственно в шаблоне темы. Поэтому я попробовал:

<?php if(function_exists(do_shortcode('[mediacategories categories="6"]'))) { ?>
  <h1>Inspiration</h1>
<?php
  do_shortcode('[mediacategories categories="6"]');
}

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

Author: Evan Yeung, 2011-02-23

2 answers

do_shortcode() просто анализирует строку. Вы должны использовать echo или print, чтобы распечатать его.

function_exists() ожидает строку, соответствующую имени функции. Посмотрев на плагин, я бы попробовал этот код:

<?php
if ( function_exists( 'mediacategories_func' ) )
{
?>
<h1>Inspiration</h1>
<?php
    print mediacategories_func( array( 'categories' => 6 ) );
}
 4
Author: fuxia, 2011-02-23 03:45:59

Обычно я добавляю такой раздел в свои обратные вызовы с коротким кодом:

if (is_array($atts)) {
    extract(shortcode_atts(array(
            'primary_att' => 'primary_default',
            ...
        ), $atts));
} else {
    $primary_att = $atts;
}

Это позволяет вам передавать "первичный" атрибут (заменять primary_att тем, что называется вашим первичным атрибутом) непосредственно в функцию, не заключая его в array...in в вашем случае это могут быть "категории", и тогда вы могли бы назвать это как mediacategories_func(6);.

 0
Author: wyrfel, 2011-02-23 05:21:55