Изменение шорткода на дочернюю тему WordPress

Я пытаюсь изменить шорткод Accordion в родительской теме, чтобы он включал h-теги, но у меня возникают проблемы с повторным выделением ошибок.

Вот оригинальный код в файле accordion.php родительской темы:

// [accordion]
function ux_accordion($atts, $content=null, $code) {
extract(shortcode_atts(array(
'auto_open' => '',
'open' => '',
'title' => ''
), $atts));
if($auto_open) $open = 1;
if($title) $title = '<h3 class="accordion_title">'.$title.'</h3>';
return $title.'<div class="accordion" rel="'.$open.'">'.flatsome_contentfix($content).'</div>';
}
add_shortcode('accordion', 'ux_accordion');


// [accordion-item]
function ux_accordion_item($atts, $content=null, $code) {
extract(shortcode_atts(array(
'title' => 'Accordion Panel',
), $atts));
return '<div class="accordion-item"><a href="#" class="accordion-title plain"><button class="toggle"><i class="icon-angle-down"></i></button><span>' . $title . '</span></a><div class="accordion-inner">'.flatsome_contentfix($content).'</div></div>';
}
add_shortcode('accordion-item', 'ux_accordion_item');

То, что я пытался сделать, здесь:

// block accordion firing from parent theme
function remove_parent_accordion() {
remove_shortcode('accordion');
remove_shortcode('accordion-item');
}
add_action('init', 'remove_parent_accordion');

// [accordion]
function ux_accordion($atts, $content=null, $code) {
extract(shortcode_atts(array(
'auto_open' => '',
'open' => '',
'title' => ''
), $atts));
if($auto_open) $open = 1;
if($title) $title = '<h2 class="accordion_title">'.$title.'</h2>';
return $title.'<div class="accordion" rel="'.$open.'">'.flatsome_contentfix($content).'</div>';
}
add_shortcode('accordion', 'ux_accordion');

// [accordion-item]
function ux_accordion_item($atts, $content=null, $code) {
extract(shortcode_atts(array(
'title' => 'Accordion Panel',
), $atts));
if($title) $title = '<h3 class="accordion_item_title">'.$title.'</h3>';
return '<div class="accordion-item"><a href="#" class="accordion-title plain"><button class="toggle"><i class="icon-angle-down"></i></button><span>' . $title . '</span></a><div class="accordion-inner">'.flatsome_contentfix($content).'</div></div>';
}
add_shortcode('accordion-item', 'ux_accordion_item');

Это приводит к «Фатальной ошибке: Невозможно переопределить ux_accordion_item ()» Не уверен, что я делаю неправильно. По праву, если срабатывает функция удаления шорткода, не должно быть проблемы, верно?

Помощь будет высоко ценится!

1

Решение

Вы не можете иметь более одной функции с одинаковым именем, даже если они не были вызваны / использованы. Вы можете использовать либо if(function_exists('function_name'){} если вы хотите избежать фатальной ошибки, но ваша функция не будет выполнена, если другая функция уже зарегистрирована с таким же.

В вашем случае вы можете просто изменить имя функции с пользовательским префиксом. Например, function ux_accordion_item следует изменить на function myprefix_accordion_item а затем обновить add_shortcode в add_shortcode('accordion-item', 'myprefix_accordion_item');, То же самое касается другого шорткода.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector