Contact Form 7 - Заполнение выпадающего списка значениями таксономии
27 сент. 2013 г., 19:19:42
Просмотры: 13.9K
Голосов: 7
В Contact Form 7 можно ли заполнить выпадающий список (Selection List) значениями пользовательской таксономии? Мне нужно, чтобы пользователь мог выбрать категорию из моего пользовательского типа записи.

Howdy_McGee
20.8K
Комментарии
Все ответы на вопрос
1
1
Ниже представлен более современный способ динамического заполнения встроенного выбора с опциями, который легко расширить для поддержки большего функционала.
/**
* Динамический выпадающий список для Contact Form 7
* @использование [select name taxonomy:{$taxonomy} ...]
*
* @param Array $tag
*
* @return Array $tag
*/
function dynamic_select_list( $tag ) {
// Работает только с выпадающими списками
if( 'select' !== $tag['type'] && ('select*' !== $tag['type']) ) {
return $tag;
} else if ( empty( $tag['options'] ) ) {
return $tag;
}
$term_args = array();
// Перебираем опции для поиска наших пользовательских параметров
foreach( $tag['options'] as $option ) {
$matches = explode( ':', $option );
if( ! empty( $matches ) ) {
switch( $matches[0] ) {
case 'taxonomy':
$term_args['taxonomy'] = $matches[1];
break;
case 'parent':
$term_args['parent'] = intval( $matches[1] );
break;
}
}
}
// Убеждаемся, что у нас есть аргументы для работы
if( empty( $term_args ) ) {
return $tag;
}
// Объединяем динамические аргументы со статическими
$term_args = array_merge( $term_args, array(
'hide_empty' => false,
) );
$terms = get_terms( $term_args );
// Добавляем термины в значения
if( ! empty( $terms ) && ! is_wp_error( $term_args ) ) {
foreach( $terms as $term ) {
$tag['values'][] = $term->name;
}
}
return $tag;
}
add_filter( 'wpcf7_form_tag', 'dynamic_select_list', 10 );
Ниже представлен устаревший/оригинальный способ сделать это, который следует считать устаревшим.
/** Динамический список для Contact Form 7 **/
/** Использование: [select name term:taxonomy_name] **/
function dynamic_select_list($tag, $unused){
$options = (array)$tag['options'];
foreach ($options as $option)
if (preg_match('%^term:([-0-9a-zA-Z_]+)$%', $option, $matches))
$term = $matches[1];
// Проверяем, установлен ли тип записи
if(!isset($term))
return $tag;
$taxonomy = get_terms($term, array('hide_empty' => 0));
if (!$taxonomy)
return $tag;
foreach ($taxonomy as $cat) {
$tag['raw_values'][] = $cat->name;
$tag['values'][] = $cat->name;
$tag['labels'][] = $cat->name;
}
$tag['raw_values'][] = 'Другое';
$tag['values'][] = 'Другое';
$tag['labels'][] = 'Другое - Укажите ниже';
return $tag;
}
add_filter( 'wpcf7_form_tag', 'dynamic_select_list', 10, 2);

Howdy_McGee
20.8K
1 окт. 2013 г. 18:16:32
Похожие вопросы