Проблема с коротким кодом

В настоящее время я создаю шорткод для отображения пользовательских терминов таксономии в виде списка в моем шаблоне:

// First we create a function
function list_terms_forme_juridique_taxonomy( $atts ) {

// Inside the function we extract custom taxonomy parameter of our 
shortcode

extract( shortcode_atts( array(
'custom_taxonomy' => 'forme_juridique',
), 
                    $atts ) );

// arguments for function wp_list_categories
$args = array( 
taxonomy => $custom_taxonomy,
title_li => ''
);

// We wrap it in unordered list 
echo '<ul>'; 
echo wp_list_categories($args);
echo '</ul>';
}

// Add a shortcode that executes our function
add_shortcode( 'forme_juridique', 'list_terms_forme_juridique_taxonomy' 
);

Я запускаю 2 следующие проблемы:

  • Шорткод (рендеринг) отображается в верхней части моей страницы, а не там, где я разместил его на странице;
  • PHP Console flag the 2 followings errores :
    • Use of undefined constant taxonomy - assumed 'taxonomy'
    • Использование неопределенной константы title_li — предполагается, что «title_li»

Любая помощь приветствуется!

Спасибо


person Fabien    schedule 20.06.2018    source источник


Ответы (1)


Во-первых, вывод вашего шорткода отображается в верхней части страницы, потому что вы повторяете вывод. Вы должны создать переменную $output и создать ее с тем, что вы хотите отобразить, а затем вернуть ее. Например:

$output = '';
$output .= '<ul>'; 
$output .= wp_list_categories($args);
$output .= '</ul>';
return $output;

Во-вторых, вы получаете ошибки, потому что не указали ключи в объявлении массива. Поэтому PHP предполагает, что они должны быть константами, которые были определены ранее.

$args = array( 
    taxonomy => $custom_taxonomy,
    title_li => ''
);

Должно быть:

$args = array( 
    'taxonomy' => $custom_taxonomy,
    'title_li' => ''
);
person M Hayward    schedule 20.06.2018
comment
Спасибо, это лучше! Нет больше ошибки. Однако шорткод по-прежнему выводится вверху страницы... - person Fabien; 20.06.2018
comment
Это должно зависеть только от того, где вы сейчас разместили свой шорткод. Где это в шаблоне? - person M Hayward; 20.06.2018
comment
Он находится посередине страницы, внутри div - person Fabien; 20.06.2018
comment
Трудно сказать, не видя сайта. Если вы проверите вывод с помощью веб-инструментов, он находится в div, как и ожидалось? Есть ли у вас другой контент в том же div, который отображается там, где вы ожидаете? - person M Hayward; 20.06.2018
comment
Я только что вспомнил, что wp_list_categories по умолчанию выдает эхо. Вам также нужно будет добавить 'echo' => 0 в ваш массив $args. - person M Hayward; 20.06.2018