2011-01-28 23 views
8

Quiero detener la reordenación de la lista de categorías de WordPress en la página de publicación de admin>. El comportamiento predeterminado es sacar las categorías asignadas a la publicación de su flujo padre/hijo natural y colocarlas en la parte superior de la lista. Quiero detener esto, ya que es confuso cuando la estructura de la categoría es grande.Wordpress - orden de la lista de categorías en la página de edición de publicaciones

¿Alguna idea?

Gracias.

Respuesta

6

¿Qué versión de Wordpress estás usando? Wordpress 3.04 proporciona el árbol principal/secundario en la página Editar publicación. ¿Estás seguro de que tampoco estás viendo la pestaña "Más usado"?

No importa, ver exactamente el problema que está hablando, que aparece después de que el mensaje se guarda:

Cateogory Treeenter image description here

bien, intente pegar esto en el functions.php en su tema:

// remove the old box 
function remove_default_categories_box() { 
    remove_meta_box('categorydiv', 'post', 'side'); 
} 
add_action('admin_head', 'remove_default_categories_box'); 

// add the new box 
function add_custom_categories_box() { 
    add_meta_box('customcategorydiv', 'Categories', 'custom_post_categories_meta_box', 'post', 'side', 'low', array('taxonomy' => 'category')); 
} 
add_action('admin_menu', 'add_custom_categories_box'); 

/** 
* Display CUSTOM post categories form fields. 
* 
* @since 2.6.0 
* 
* @param object $post 
*/ 
function custom_post_categories_meta_box($post, $box) { 
    $defaults = array('taxonomy' => 'category'); 
    if (!isset($box['args']) || !is_array($box['args'])) 
     $args = array(); 
    else 
     $args = $box['args']; 
    extract(wp_parse_args($args, $defaults), EXTR_SKIP); 
    $tax = get_taxonomy($taxonomy); 

    ?> 
    <div id="taxonomy-<?php echo $taxonomy; ?>" class="categorydiv"> 
     <ul id="<?php echo $taxonomy; ?>-tabs" class="category-tabs"> 
      <li class="tabs"><a href="#<?php echo $taxonomy; ?>-all" tabindex="3"><?php echo $tax->labels->all_items; ?></a></li> 
      <li class="hide-if-no-js"><a href="#<?php echo $taxonomy; ?>-pop" tabindex="3"><?php _e('Most Used'); ?></a></li> 
     </ul> 

     <div id="<?php echo $taxonomy; ?>-pop" class="tabs-panel" style="display: none;"> 
      <ul id="<?php echo $taxonomy; ?>checklist-pop" class="categorychecklist form-no-clear" > 
       <?php $popular_ids = wp_popular_terms_checklist($taxonomy); ?> 
      </ul> 
     </div> 

     <div id="<?php echo $taxonomy; ?>-all" class="tabs-panel"> 
      <?php 
      $name = ($taxonomy == 'category') ? 'post_category' : 'tax_input[' . $taxonomy . ']'; 
      echo "<input type='hidden' name='{$name}[]' value='0' />"; // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks. 
      ?> 
      <ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear"> 
       <?php 
       /** 
       * This is the one line we had to change in the original function 
       * Notice that "checked_ontop" is now set to FALSE 
       */ 
       wp_terms_checklist($post->ID, array('taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => FALSE)) ?> 
      </ul> 
     </div> 
    <?php if (!current_user_can($tax->cap->assign_terms)) : ?> 
    <p><em><?php _e('You cannot modify this taxonomy.'); ?></em></p> 
    <?php endif; ?> 
    <?php if (current_user_can($tax->cap->edit_terms)) : ?> 
      <div id="<?php echo $taxonomy; ?>-adder" class="wp-hidden-children"> 
       <h4> 
        <a id="<?php echo $taxonomy; ?>-add-toggle" href="#<?php echo $taxonomy; ?>-add" class="hide-if-no-js" tabindex="3"> 
         <?php 
          /* translators: %s: add new taxonomy label */ 
          printf(__('+ %s'), $tax->labels->add_new_item); 
         ?> 
        </a> 
       </h4> 
       <p id="<?php echo $taxonomy; ?>-add" class="category-add wp-hidden-child"> 
        <label class="screen-reader-text" for="new<?php echo $taxonomy; ?>"><?php echo $tax->labels->add_new_item; ?></label> 
        <input type="text" name="new<?php echo $taxonomy; ?>" id="new<?php echo $taxonomy; ?>" class="form-required form-input-tip" value="<?php echo esc_attr($tax->labels->new_item_name); ?>" tabindex="3" aria-required="true"/> 
        <label class="screen-reader-text" for="new<?php echo $taxonomy; ?>_parent"> 
         <?php echo $tax->labels->parent_item_colon; ?> 
        </label> 
        <?php wp_dropdown_categories(array('taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '&mdash; ' . $tax->labels->parent_item . ' &mdash;', 'tab_index' => 3)); ?> 
        <input type="button" id="<?php echo $taxonomy; ?>-add-submit" class="add:<?php echo $taxonomy ?>checklist:<?php echo $taxonomy ?>-add button category-add-sumbit" value="<?php echo esc_attr($tax->labels->add_new_item); ?>" tabindex="3" /> 
        <?php wp_nonce_field('add-'.$taxonomy, '_ajax_nonce-add-'.$taxonomy, false); ?> 
        <span id="<?php echo $taxonomy; ?>-ajax-response"></span> 
       </p> 
      </div> 
     <?php endif; ?> 
    </div> 
    <?php 
} 

El único cambio real estaba añadiendo 'checked_ontop' => FALSE a los argumentos en wp_terms_checklist() función en el medio de ese desastre. Todo lo demás es la función original post_categories_meta_box().

(Se podía modificar el original post_categories_meta_box() en /wp-admin/includes/meta-boxes.php, pero no es recomendable meterse con núcleo y la adición/eliminación de las acciones que el anterior es la forma correcta de hacerlo.

enter image description here

+0

Acabo de probar esto y funciona bien - solución fácil y fácil de implementar. – Schoffelman

+0

Además, no pareces ser la única persona molesta por esta "característica": de [Wordpress Trac] (http://core.trac.wordpress.org/ticket/10982) – SideOfBacon

+0

Eso es fantástico, gracias. –

14

Mientras que los anteriores son grandes soluciones alternativas, especialmente si desea más control sobre la taxonomía METABOX lista, creo que la solución más sencilla sería la siguiente:

function taxonomy_checklist_checked_ontop_filter ($args) 
{ 

    $args['checked_ontop'] = false; 
    return $args; 

} 

add_filter('wp_terms_checklist_args','taxonomy_checklist_checked_ontop_filter'); 

¡Y eso debería encargarse de eso!

Cuestiones relacionadas