Пользовательская таксономия - ограничить глубину раскрывающегося списка родительских элементов

У меня есть пользовательская иерархическая таксономия «Регионы», и я создаю термины на 3 уровнях: страна > штат > город. Это используется в целях SEO, поэтому у меня безумное количество городов (60 тысяч+).

На данный момент я добавил около 12 тысяч терминов, и страницы администрирования таксономии стали мучительно медленными, потому что WP вытаскивает все существующие таксономии в раскрывающийся список «Родители». Теперь я пытаюсь ограничить глубину этого выпадающего меню двумя уровнями - только страны и штаты. Город никогда не будет родителем другого города, так что я могу это сделать.

Я пытался следовать https://wordpress.stackexchange.com/questions/106164/how-to-disable-page-attributes-dropdown-in-wp-admin, но не повезло — я не могу понять, как изменить аргументы для wp_dropdown_categories , что (я полагаю) мне и нужно.

Я пробовал это в своих functions.php:

add_filter( 'wp_dropdown_categories', 'limit_parents_wpse_106164' );

function limit_parents_wpse_106164( $args )
{
    $args['depth'] = '1';
    return $args;
}

Но это не работает, родительский раскрывающийся список по-прежнему заполнен всеми терминами. Что мне здесь не хватает? Заранее спасибо.


person bugnumber9    schedule 29.11.2016    source источник


Ответы (1)


Давайте посмотрим на часть кода, которая генерирует родительский раскрывающийся список:
(wp-admin\edit-tag-form.php)

<?php if ( is_taxonomy_hierarchical($taxonomy) ) : ?>
        <tr class="form-field term-parent-wrap">
            <th scope="row"><label for="parent"><?php _ex( 'Parent', 'term parent' ); ?></label></th>
            <td>
                <?php
                $dropdown_args = array(
                    'hide_empty'       => 0,
                    'hide_if_empty'    => false,
                    'taxonomy'         => $taxonomy,
                    'name'             => 'parent',
                    'orderby'          => 'name',
                    'selected'         => $tag->parent,
                    'exclude_tree'     => $tag->term_id,
                    'hierarchical'     => true,
                    'show_option_none' => __( 'None' ),
                );

                /** This filter is documented in wp-admin/edit-tags.php */
                $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy, 'edit' );
                wp_dropdown_categories( $dropdown_args ); ?>
                <?php if ( 'category' == $taxonomy ) : ?>
                <p class="description"><?php _e('Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional.'); ?></p>
                <?php endif; ?>
            </td>
        </tr>
<?php endif; // is_taxonomy_hierarchical() ?>

Как видите, они используют другой хук-фильтр: taxonomy_parent_dropdown_args

Итак, давайте попробуем это:

add_filter( 'taxonomy_parent_dropdown_args', 'limit_parents_wpse_106164', 10, 2 );

function limit_parents_wpse_106164( $args, $taxonomy ) {

    if ( 'my_custom_taxonomy' != $taxonomy ) return $args; // no change

    $args['depth'] = '1';
    return $args;
}
person Andy Tschiersch    schedule 29.11.2016
comment
Я немного отредактировал свой исходный пост, чтобы показать, какой именно код я использую в functions.php. Я пытался добавить $args['hierarchical'] = '1';, но это тоже не помогло. - person bugnumber9; 29.11.2016
comment
Хорошо, я обновил свой ответ. Попробуйте. Обязательно измените my_custom_taxonomy на свою собственную таксономию. - person Andy Tschiersch; 30.11.2016
comment
Я должен был потратить больше времени на просмотр кода, чем на Кодекс :) ​​Спасибо, Энди, это работает отлично. - person bugnumber9; 30.11.2016