Получить пользовательские таксономии из атрибута шорткода - PullRequest
1 голос
/ 08 ноября 2019

Я делаю шорткод, который фильтрует пользовательские таксономии на странице. У меня это работает на 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 ().

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

мой шорткод выглядит так: [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
                    }
                }
            }
        }
    }
?>

Есть ли какое-нибудь решение?

1 Ответ

2 голосов
/ 08 ноября 2019

Проблема в том, что переход к шорткоду идет с пробелом, поэтому для решения этой проблемы перед взрывом мы удалим пробелы из строки

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']);
    //removing spaces here
    $ShortcodeAtts = str_replace(" ", "", $ShortcodeAtts );
    $taxonomies = explode(',', $ShortcodeAtts); 

    $output = 'names';
    $operator = 'and';
    $taxonomies = get_taxonomies($args,$output,$operator); 

    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
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...