Я делаю шорткод, который фильтрует пользовательские таксономии на странице. У меня это работает на 90%, но я не могу преобразовать атрибуты из шорткода в массив, который работает. Я получаю все таксономии из функции get_taxonomies (), но я хочу таксономии из моих атрибутов шорткода.
Итак, я попробовал функцию get_taxonomies (), и она выдает это и работает:
Array ( [opleiding_niveaus] => opleiding_niveaus [provincies] => provincies [portfolio_category] => portfolio_category [portfolio_field] => portfolio_field [testimonial_category] => testimonial_category [portfolio_tag] => portfolio_tag )
Теперь у меня есть вот что вместо get_taxonomies ():
$atts = shortcode_atts(
array(
'taxonomy' => 'nothing',
), $atts);
$ShortcodeAtts= esc_attr($atts['taxonomy']);
$taxonomies = explode(',', $ShortcodeAtts);
и выводит это:
Array ( [0] => provincies [1] => opleiding_niveaus )
Мой цикл выглядит так:
if ($taxonomies) {
foreach ($taxonomies as $taxonomy ) {
echo '<h4>'. $taxonomy. '</h4>';
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$count = count($terms);
if ( $count > 0 ){
foreach ( $terms as $term ) {
$termlinks= get_term_link($term,$taxonomy);
?> <a href="<?php echo $termlinks; ?>">
<?php echo "<div style='display: block'><input type='checkbox' id='".$term->name."'" . $term->name . "/><label for='".$term->name."'>"; echo $term->name?></label></div><?php
}
}
}
}
Ипроблема с моим кодом состоит в том, что массив atts шорткода плохо отформатирован. и выдает ошибку при зацикливании, что не сделала функция get_taxonomies ().
![](https://i.stack.imgur.com/TXOXO.png)
, так что теперь у меня выглядит вот так. первая таксономия работает, но вторая не будет работать
мой шорткод выглядит так: [filter taxonomy="provincies, opleiding_niveaus"]
полный код:
<?php
add_action('init', 'loadonInit');
function loadonInit() {
add_shortcode('filter', 'filter');
}
function filter($atts) {
$args = array('public' => true, '_builtin' => false);
$atts=shortcode_atts(
array(
'taxonomy' => 'nothing',
), $atts);
$ShortcodeAtts= esc_attr($atts['taxonomy']);
$taxonomies = explode(',', $ShortcodeAtts);
// $output = 'names';
// $operator = 'and';
// $taxonomies = get_taxonomies($args,$output,$operator);
print_r($ShortcodeAttsArray);
if ($taxonomies) {
foreach ($taxonomies as $taxonomy ) {
echo '<h4>'. $taxonomy. '</h4>';
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$count = count($terms);
if ( $count > 0 ){
foreach ( $terms as $term ) {
$termlinks= get_term_link($term,$taxonomy);
?> <a href="<?php echo $termlinks; ?>">
<?php echo "<div style='display: block'><input type='checkbox' id='".$term->name."'" . $term->name . "/><label for='".$term->name."'>"; echo $term->name?></label></div><?php
}
}
}
}
}
?>
Есть ли какое-нибудь решение?