Agregar campo personalizado a Categoría

21

Me gustaría agregar campos personalizados a una determinada categoría. Una categoría solo tiene los siguientes campos:

Nombre:

Slug:

Padre:

Descripción:

Dado que tengo un sitio de series de TV, quiero agregar algunos campos más, quiero algo como esto, cuando creo una nueva categoría (Categoría = Serie)

Nombre:

Artista:

Año:

Tipo:

Género:

Resumen:

Slug:

Padre:

Descripción:

Y así sucesivamente ...

¿Alguna ayuda por favor? Gracias de antemano.

    
pregunta Earlee 07.02.2011 - 13:27

4 respuestas

24

Publiqué un Cómo hacerlo hace una semana enlace

espero que esto ayude.

Ohad.

Aquí están los detalles de la publicación:

Lo primero que debemos hacer es agregar los campos adicionales al formulario de edición de categorías usando el gancho edit_category_form_fields y usamos una función simple que imprimirá los campos adicionales.

<?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>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

Como puede ver, agregué 4 campos nuevos y todos ellos están en una matriz Cat_meta [clave] porque de esa manera solo creamos una fila en la tabla de opciones para guardar todos los campos adicionales de la categoría en lugar de una fila para cada uno campo.

A continuación, debemos guardar los campos adicionales en la base de datos una vez que el usuario envíe el formulario de edición de categoría y lo hacemos usando "edited_category" con una función que se ejecutará en cada uno de los campos enviados y los insertará en la base de datos usando La función update_option, como esta:

<?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 );
    }
}

En el código anterior puede ver que todos los campos adicionales que hemos agregado están almacenados en la tabla de opciones de la base de datos con el nombre 'category_ID', donde ID es la identificación de la categoría específica que acabamos de editar y eso significa que puede llamar a estos datos en nuestros complementos o archivos de temas fácilmente usando la función get_option.

digamos, por ejemplo, mi ID de categoría es 25, entonces mi código se verá como

<?php $cat_data = get_option('category_25'); ?>

Como dije al principio, necesito mostrar una imagen diferente para cada categoría, así que en ese caso agregué estas pocas líneas de código a la categoría de mi tema. justo después del código que muestra el título de la categoría:

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

Agradable y fácil y todos hemos terminado. El resultado debería ser similar a este:

    
respondido por el Bainternet 07.02.2011 - 15:16
15

A partir de Wordpress 4.4, add_term_meta () , update_term_meta () y get_term_meta () se han agregado las funciones . Esto significa que el código proporcionado por MxmastaMills puede actualizarse para utilizar un enfoque mucho menos intrépido.

Aquí está mi actualización de la misma. Solo hay un campo porque quería agregar un título personalizado, pero funcionará de la misma manera para todos los campos que quieras agregar.

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');
    
respondido por el Luke Simmons 29.06.2016 - 22:17
2

Este código funciona:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});
    
respondido por el Mario62RUS 14.01.2018 - 16:01
1

Paul Menard proporcionó un ejemplo de cómo crear y usar el término meta en su blog ...
Meta personalizada para nuevas taxonomías en WordPress 3.0 .

No hay ningún ejemplo de creación de la tabla de base de datos o de la verificación de $_POST vars, por lo que deberá hacer esas pequeñas cosas usted mismo, pero parece una base de código decente para construir sobre ... :)

    
respondido por el t31os 07.02.2011 - 13:51

Lea otras preguntas en las etiquetas