¿Agregar campos a la pantalla de edición de categoría, etiqueta y taxonomía personalizada en el administrador de WordPress?

33

La pregunta es " ¿Cómo agrego uno o más campos a la Categoría, Etiqueta y Pantalla de edición de taxonomía personalizada en el Administrador de WordPress? " Esta pregunta se hizo en la lista de wp-hackers el 1 de agosto de 2010 y ofrecí una solución más tarde ese día. El autor de la pregunta original volvió a discutir el tema hoy (21 de agosto), lo que me recordó la solución. Como podría ser una necesidad común, decidí publicar la solución, incluido el código aquí, para que otros la encuentren en el futuro.

MikeSchinkel
fuente
Hola Mike, creo que sería mejor si publicas el código en el cuadro de respuesta. De esa manera, tenemos una copia de seguridad aquí, en caso de que github no funcione.
ariefbayu
@silent: Hola, estoy trabajando en eso. :) Estoy a medio camino, pero me he golpeado contra una pared y necesito dormir. Así es como se verá (algo) cuando termine: wordpress.stackexchange.com/questions/578/#582
MikeSchinkel
¿Alguna novedad sobre este? De hecho, estoy un poco interesado ...: D
John P Bloch
Hola, @John P Bloch : Mis clientes me han inmovilizado y simplemente no han tenido tiempo. Esperemos que pronto ...
MikeSchinkel
@John P Bloch Realmente lo probé y funciona muy bien, necesitaba 'agrupar' ciertas categorías sin una categoría principal.
Amit

Respuestas:

23

Agregué un nuevo campo 'imagen' (archivo de tipo de entrada) a la categoría con la ayuda de estos

add_action('category_edit_form_fields','category_edit_form_fields');
add_action('category_edit_form', 'category_edit_form');
add_action('category_add_form_fields','category_edit_form_fields');
add_action('category_add_form','category_edit_form');


function category_edit_form() {
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#edittag').attr( "enctype", "multipart/form-data" ).attr( "encoding", "multipart/form-data" );
        });
</script>
<?php 
}

function category_edit_form_fields () {
?>
    <tr class="form-field">
            <th valign="top" scope="row">
                <label for="catpic"><?php _e('Picture of the category', ''); ?></label>
            </th>
            <td>
                <input type="file" id="catpic" name="catpic"/>
            </td>
        </tr>
        <?php 
    }

Usted es libre de usar cualquier taxonomía, solo reemplace categorysu nombre de taxonomía

tpoxa
fuente
esto es excelente, pero ¿podría explicar (o proporcionar un ejemplo posiblemente) cómo se integraría correctamente esta personalización si desea agregar esto a una taxonomía personalizada, por ejemplo "personas"?
NetConstructor.com
2
Actualización: aunque he copiado el código exacto anterior para probar esto, el archivo no parece estar guardado o al menos no aparece. ¿Podría explicar dónde está guardando el archivo, tal vez sea necesario editar los permisos de esa carpeta (o incluso mejor, podría describir cómo se modificaría la ubicación de la carpeta donde está guardado?). Cuando selecciono un archivo y luego intento guardar un término, está guardando todo excepto el archivo y, por lo tanto, no me muestra la imagen cargada.
NetConstructor.com
9

Además, si desea agregar ese campo en el formulario de taxonomía personalizada, simplemente sustituya la categoría con el nombre de la taxonomía personalizada en la add_actionfunción.

Ejemplo:

add_action('{custom_taxonomy}_edit_form_fields','category_edit_form_fields');
add_action('{custom_taxonomy}_edit_form', 'category_edit_form');
add_action('{custom_taxonomy}_add_form_fields','category_edit_form_fields');
add_action('{custom_taxonomy}_add_form','category_edit_form');
Ted
fuente
2

Para aquellos que buscan conectarse al campo de formulario de etiqueta, el enlace es ligeramente diferente.

add_tag_form_fields

en lugar de tag_add_form_fields como cabría esperar

Dean_Wilson
fuente
1

Me di cuenta de que esto se preguntó hace un tiempo, pero WordPress ha cambiado un poco desde entonces, así que decidí desarrollar un pequeño script que simplifica el proceso de agregar campos personalizados a las taxonomías y, opcionalmente, le permite agregar columnas a la tabla de términos para cada campo. La secuencia de comandos se llama amarkal-taxonomy y forma parte del marco de Wordmark de Amarkal .

Usando amarkal-taxonomy, agregar un campo personalizado se simplifica a:

// Add a text field to the 'category' taxonomy 'add' & 'edit' forms:
amarkal_taxonomy_add_field('category', 'cat_icon', array(
    'type'        => 'text',
    'label'       => 'Icon',
    'description' => 'The category\'s icon',
    'table'       => array(
        'show'      => true,  // Add a column to the terms table
        'sortable'  => true   // Make that column sortable
    )
));

// Then you can retrieve the data using:
$icon = get_term_meta( $term_id, 'cat_icon', true );
Yoav Kadosh
fuente
1

He agregado la imagen de agregar y quitar la imagen adicional archivada en una taxonomía personalizada cuyo nombre es seguro.

/**
 * Plugin class
 **/
if ( ! class_exists( 'CT_TAX_META' ) ) {

class CT_TAX_META {

  public function __construct() {
    //
  }

 /*
  * Initialize the class and start calling our hooks and filters
  * @since 1.0.0
 */
 public function init() {
   add_action( 'insurance_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 );
   add_action( 'created_insurance', array ( $this, 'save_category_image' ), 10, 2 );
   add_action( 'insurance_edit_form_fields', array ( $this, 'update_category_image' ), 10, 2 );
   add_action( 'edited_insurance', array ( $this, 'updated_category_image' ), 10, 2 );
   add_action( 'admin_enqueue_scripts', array( $this, 'load_media' ) );
   add_action( 'admin_footer', array ( $this, 'add_script' ) );
 }

public function load_media() {
 wp_enqueue_media();
}

 /*
  * Add a form field in the new category page
  * @since 1.0.0
 */
 public function add_category_image ( $taxonomy ) { ?>
   <div class="form-field term-group">
     <label for="category-image-id"><?php _e('Image', 'hero-theme'); ?></label>
     <input type="hidden" id="category-image-id" name="category-image-id" class="custom_media_url" value="">
     <div id="category-image-wrapper"></div>
     <p>
       <input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
       <input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
    </p>
   </div>
 <?php
 }

 /*
  * Save the form field
  * @since 1.0.0
 */
 public function save_category_image ( $term_id, $tt_id ) {
   if( isset( $_POST['category-image-id'] ) && '' !== $_POST['category-image-id'] ){
     $image = $_POST['category-image-id'];
     add_term_meta( $term_id, 'category-image-id', $image, true );
   }
 }

 /*
  * Edit the form field
  * @since 1.0.0
 */
 public function update_category_image ( $term, $taxonomy ) { ?>
   <tr class="form-field term-group-wrap">
     <th scope="row">
       <label for="category-image-id"><?php _e( 'Image', 'hero-theme' ); ?></label>
     </th>
     <td>
       <?php $image_id = get_term_meta ( $term -> term_id, 'category-image-id', true ); ?>
       <input type="hidden" id="category-image-id" name="category-image-id" value="<?php echo $image_id; ?>">
       <div id="category-image-wrapper">
         <?php if ( $image_id ) { ?>
           <?php echo wp_get_attachment_image ( $image_id, 'thumbnail' ); ?>
         <?php } ?>
       </div>
       <p>
         <input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="<?php _e( 'Add Image', 'hero-theme' ); ?>" />
         <input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="<?php _e( 'Remove Image', 'hero-theme' ); ?>" />
       </p>
     </td>
   </tr>
 <?php
 }

/*
 * Update the form field value
 * @since 1.0.0
 */
 public function updated_category_image ( $term_id, $tt_id ) {
   if( isset( $_POST['category-image-id'] ) && '' !== $_POST['category-image-id'] ){
     $image = $_POST['category-image-id'];
     update_term_meta ( $term_id, 'category-image-id', $image );
   } else {
     update_term_meta ( $term_id, 'category-image-id', '' );
   }
 }

/*
 * Add script
 * @since 1.0.0
 */
 public function add_script() { ?>
   <script>
     jQuery(document).ready( function($) {
       function ct_media_upload(button_class) {
         var _custom_media = true,
         _orig_send_attachment = wp.media.editor.send.attachment;
         $('body').on('click', button_class, function(e) {
           var button_id = '#'+$(this).attr('id');
           var send_attachment_bkp = wp.media.editor.send.attachment;
           var button = $(button_id);
           _custom_media = true;
           wp.media.editor.send.attachment = function(props, attachment){
             if ( _custom_media ) {
               $('#category-image-id').val(attachment.id);
               $('#category-image-wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
               $('#category-image-wrapper .custom_media_image').attr('src',attachment.url).css('display','block');
             } else {
               return _orig_send_attachment.apply( button_id, [props, attachment] );
             }
            }
         wp.media.editor.open(button);
         return false;
       });
     }
     ct_media_upload('.ct_tax_media_button.button'); 
     $('body').on('click','.ct_tax_media_remove',function(){
       $('#category-image-id').val('');
       $('#category-image-wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
     });
     // Thanks: http://stackoverflow.com/questions/15281995/wordpress-create-category-ajax-response
     $(document).ajaxComplete(function(event, xhr, settings) {
       var queryStringArr = settings.data.split('&');
       if( $.inArray('action=add-tag', queryStringArr) !== -1 ){
         var xml = xhr.responseXML;
         $response = $(xml).find('term_id').text();
         if($response!=""){
           // Clear the thumb image
           $('#category-image-wrapper').html('');
         }
       }
     });
   });
 </script>
 <?php }

  }

$CT_TAX_META = new CT_TAX_META();
$CT_TAX_META -> init();

}

Nota: Si desea agregar este campo a una taxonomía diferente, por ejemplo, para un tipo de publicación personalizado, necesitaría reemplazar la referencia a la categoría con una referencia a su propia ficha de taxonomía. Por ejemplo, si agrega una taxonomía de género creada, enganchará esta función a través de

add_action( 'taxonomy_add_form_fields', array ( $this, 'add_category_image' ), 10, 2 ).

Mi nombre de babosa de taxonomía es seguro.

add_action ('insurance_add_form_fields', array ($ this, 'add_category_image'), 10, 2);

Use este código en su functions.phparchivo.

Vivekpathak
fuente
0

Debe agregar su código a su archivo de funciones functions.php, también si desea agregar ese campo en el formulario de taxonomía personalizada, simplemente sustituya la categoría con el nombre de la taxonomía personalizada en la función add_action. Ejemplo: add_action ('category_edit_form_fields', 'category_edit_form_fields'); será add_action ('custom_taxonomy_name_form_fields', 'function_name_to_hook_on');


fuente