Muchas veces necesitamos agregar campos extras a las categorías en WordPress, principalmente para customizar la plantilla category.php o para manejar nuevos datos relacionados a la categoría como imágenes, estilos e incluso contenido html.

Las categorías de wordpres por defecto vienen así, con solo cuatro campos (nombre, slug, parent category y descripción ).

 

agregar campos extras en WordPress

 

¿Cómo añadir otros campos personalizados en WordPress?

Aquí se muestra como hemos añadido tres campos más  a las categorías. ¿Cómo?

agregar campos extras

 

Primer Paso

Primero debemos añadir el hook edit_category_form_fields que nos permite modificar la vista categoría para adicionar nuevos elementos html como textfield, buttons, texarea y otros.

<?php

//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');
//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
            <span class="description"><?php _e('Image for category: use full url with '); ?></span>
        </td>
</tr>
<?php
}

 

Segundo Paso

En este paso, básicamente lo que hacemos es guardar la información en la base de datos de wordpress, específicamente en la tabla wp_options, se utiliza para ello el hook edited_category.

<?php
// save extra category extra fields hook
    add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
    function save_extra_category_fileds( $term_id ) {
        if ( isset( $_POST['Cat_meta'] ) ) {
            $t_id = $term_id;
            $cat_meta = get_option( "category_$t_id");
            $cat_keys = array_keys($_POST['Cat_meta']);
                foreach ($cat_keys as $key){
                if (isset($_POST['Cat_meta'][$key])){
                    $cat_meta[$key] = $_POST['Cat_meta'][$key];
                }
            }
            //save the option array
            update_option( "category_$t_id", $cat_meta );
        }
    }

 

Tercer Paso

El último paso es utilizar los valores, como dije al principio, mayormente estos valores se utilizan para extender la vista de la plantilla categoría (category.php), como por ejemplo definir una imagen principal para cada categoría.

<?php
if (isset($cat_data['img'])){
    $cat_img=$cat_data['img'];
}
?>

<section id="jumbotron">
        <div class="container jumbotron jumbotron-fluid mb-0" style="background: <?php echo $cat_bg_color ?>; max-width: 100%;background-size: cover;color:<?php echo $cat_font_color ?> !important">
        
          <div class="container">
            <div class="row">
                <div class="col-md-6">
                    <img src="<?php echo $cat_img ?>" class="img-fluid" alt="Category Image">
                </div>
            </div>
          </div>


 

Conclusión

Existen diversos plugin en wordpress para agregar campos extras a las categorías, pero esto podría suponer algunos problemas como: el rendimiento, la ilegibilidad del código e incluso llena interfaz de wordpress con más menu y elementos visuales. Si estás creando un tema desde el inicio, querrás depender lo menos posible de que tu tema requiera otros plugins para su correcto funcionamiento, es por ello que adicionar los campo de esta forma hace que nuestro sitio sea más simple.

Contenido