自定义分类 - 限制父下拉深度

时间:2016-11-29 12:53:23

标签: wordpress

我有一个自定义的分层分类“区域”,我在3个级别创建术语:country>国家>市。这是用于搜索引擎优化的目的,所以我有一个疯狂的城市数量(60k +)。

到目前为止,我添加了大约12k的术语,而且分类法管理页面变得非常缓慢,因为WP将所有现有的分类法拉入了父下拉列表中。现在我试图将此下拉菜单的深度限制为2个级别 - 仅限国家和州。一个城市永远不会成为另一个城市的父母,所以我很擅长这样做。

我试图关注https://wordpress.stackexchange.com/questions/106164/how-to-disable-page-attributes-dropdown-in-wp-admin但没有运气 - 我无法弄清楚如何改变 wp_dropdown_categories 的args,我认为这是我需要什么。

我在我的functions.php中试过这个:

add_filter( 'wp_dropdown_categories', 'limit_parents_wpse_106164' );

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

但这不起作用,父下拉列表仍然包含所有条款。我在这里错过了什么?提前谢谢。

1 个答案:

答案 0 :(得分:3)

让我们看一下生成父下拉列表的代码部分:
(可湿性粉剂管理员\编辑标签的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;
}