将“全选”添加到自定义分类中

时间:2013-06-30 作者:NW Tech

是否可以为我的自定义帖子类型向自定义分类法添加“全选”?我正在从事的项目要求该选项能够选择所有分类术语。虽然我可以浏览并手动单击每个术语,但当我有几百个术语时,它会变得相当麻烦。

我还没有尝试过任何东西,因为我不知道该怎么做。。。。这是我可以添加到我的functions.php 或者它是可以通过javascript实现的吗?

1 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

您不必重建元数据库。。。您可以通过get_terms 滤器这将向复选框列表中添加一个“所有术语”术语(假设采用层次分类法)。

add_filter( \'get_terms\', \'wpa104168_all_terms\', 10, 3 );

function wpa104168_all_terms ( $terms, $taxonomies, $args ){

        if ( is_admin() && function_exists( \'get_current_screen\' ) && ! is_wp_error( $screen = get_current_screen() ) && in_array( $screen->base, array( \'post\', \'edit-post\', \'edit\' ) ) ) {

            if( in_array( \'genre\', ( array ) $taxonomies ) ) {

                $all_terms = __( \'All Genres\' );

                $all = (object) array( \'term_id\' => \'all\', \'slug\' => \'all\', \'name\' => $all_terms, \'parent\' => \'0\' );

                $terms[\'all\'] = $all;
            }
        }
        return $terms;
    }
这一点继续下去save_post 测试是否存在该伪术语,然后将该分类法中的所有术语分配给该特定帖子。

add_action( \'save_post\', \'wpa104168_save_all_terms\', 10, 3 );

function wpa104168_save_all_terms ( $post_id ){

// verify this came from our screen and with proper authorization.

    if ( !wp_verify_nonce( $_POST[\'_wpnonce\'], \'update-post_\' . $post_id )) {
        return $post_id;
    }

    // verify if this is an auto save routine. If it is our form has not been submitted, so we dont want to do anything
    if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
        return $post_id;

    // Check permissions
    if ( \'page\' == $_POST[\'post_type\'] ) {
        if ( !current_user_can( \'edit_page\', $post_id ) )
            return $post_id;
    } else {
        if ( !current_user_can( \'edit_post\', $post_id ) )
        return $post_id;
    }

    // OK, we\'re authenticated: we need to find and save the data
   if ( isset( $_POST[\'tax_input\'][\'genre\'] ) && is_array( $_POST[\'tax_input\'][\'genre\'] ) && in_array( \'all\', $_POST[\'tax_input\'][\'genre\'] ) ){

    $args = array( \'hide_empty\'    => false );
        $terms = get_terms( \'genre\', $args );


        if ( ! is_wp_error( $terms ) ){

            foreach ( $terms as $term ){
                $update[] = $term->slug;
            }

            wp_set_object_terms( $post_id, $update, \'genre\' );

        }

   }



    return $post_id;

}
但脚本化解决方案要简单得多。不需要在每个管理页面上加载,但我会让你自己来整理。

澄清:变更genrechecklist 到相应的分类名称。。。。{$taxonomy}checklist

add_action( \'admin_print_footer_scripts\', \'wpa104168_js_solution\' );

function wpa104168_js_solution(){ ?>

<script type="text/javascript">

jQuery(document).ready(function($) {

    $(\'ul#genrechecklist\').append(\'<li><label class="selectit"><input type="checkbox" class="toggle-all-terms"/> Check All</label>\');

    $(\'.toggle-all-terms\').on(\'change\', function(){
        $(this).closest(\'ul\').find(\':checkbox\').prop(\'checked\', this.checked );
    });

});
</script>

<?php }

结束

相关推荐

如何优化‘SELECT FOUND_ROWS()’查询?每天都会有几个“高平均负载”警报

我有5000个常规职位,一个职位类型有6000个职位,另一个职位类型有2000个职位。不用说,这使得wp_posts 桌子很大。更不用说,我已经设置了自定义分类法来模拟职位类型,因此对于输入公司职位类型的每个公司A,都有公司A,我手动将公司A输入公司分类法。这样,当我定期发布关于a公司的帖子时,我可以有效地tag 公司A进入帖子,然后该帖子出现在公司A的自定义帖子类型页面上。Specs : 将WP Super Cache与Cloudflare一起作为CDN运行。主题是Wordpress TwentyEle