Поддержка массивов в шорткодах

Поддержка массивов в шорткодах

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

Таким образом, я начал с создания шорткода и настройки атрибутов, для которых мне нужно было собрать данные. Мой шорткод имел следующий вид:

function chain_select_shortcode( $atts ) {
	extract( shortcode_atts( array( 'tax' => 'category', 'level' => 1, 'titles' => array( 'Please select…' ), 'labels' => '', 'btn_text' => 'Submit', 'exclude' => '', 'count' => 1 ), $atts ) );
}

add_shortcode( 'ajax_chain_select', 'chain_select_shortcode' );

Здесь я установил шорткод и задал стандартные настройки (для тех случаев, когда атрибуты не объявлены в шорткоде).

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

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

[ajax_chain_select tax="competitor" level=2, titles="Select Manufacturer, Select Product" labels="Manufacturer, Product" count=0]

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

При передаче этих данных в функцию мы можем использовать explode() для создания массива. Вот, как это будет выглядеть в окончательном варианте:

function chain_select_shortcode( $atts ) {
	extract( shortcode_atts( array( 'tax' => 'category', 'level' => 1, 'titles' => array( 'Please select…' ), 'labels' => '', 'btn_text' => 'Submit', 'exclude' => '', 'count' => 1 ), $atts ) );

	return chainselect_getcategories( $tax, $level, explode( ', ', $titles ), explode( ', ', $labels ), $btn_text, $exclude, $count );
}

add_shortcode( 'ajax_chain_select', 'chain_select_shortcode' );

Обратите внимание на функцию chainselect_categories – в ней содержится функция explode, необходимая для создания массива, которая требует, чтобы значения были разделены пробелом и запятой.

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

Источник: doitwithwp.com

Сохранено из oddstyle.ru

Добавить комментарий

%d такие блоггеры, как: