Adicione um campo personalizado à categoria

21

Gostaria de adicionar campos personalizados a uma determinada categoria. Uma categoria tem apenas os seguintes campos:

Nome:

Slug:

Pai:

Descrição:

Como tenho um site da série de TV, quero adicionar mais alguns campos, quero algo assim, quando criar uma nova categoria (categoria = série)

Nome:

Artista:

Ano:

Tipo:

Gênero:

Resumo:

Slug:

Pai:

Descrição:

E assim por diante ...

Qualquer ajuda por favor? Agradecemos antecipadamente.

    
por Earlee 07.02.2011 / 13:27
fonte

4 respostas

24

Eu postei um How To about it há uma semana enlace

espero que isso ajude.

Ohad.

Aqui estão os detalhes da postagem:

A primeira coisa que precisamos fazer é adicionar os campos extras ao formulário de edição de categoria usando o gancho edit_category_form_fields e usamos uma função simples que imprime os campos extras.

<?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 você pode ver, eu adicionei 4 novos campos e todos eles estão em uma matriz Cat_meta [key] porque assim criamos apenas uma linha na tabela de opções para salvar todos os campos extras da categoria ao invés de uma linha para cada campo.

Em seguida, precisamos salvar os campos extras no banco de dados assim que um usuário enviar o formulário de edição de categoria e fazer isso usando "edited_category" com uma função que será executada em cada um dos campos enviados e inserida no banco de dados usando a função update_option, assim:

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

Do código acima você pode ver que todos os campos extras que adicionamos são armazenados na tabela de opções do banco de dados com o nome 'category_ID', onde ID é o id da categoria específica que acabamos de editar e isso significa que pode chamar esses dados em nossos plug-ins ou arquivos de tema facilmente usando a função get_option.

digamos, por exemplo, que minha id de categoria é 25, então meu código será parecido com

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

Como afirmei no começo, preciso exibir uma imagem diferente para cada categoria, então, nesse caso, adicionei essas poucas linhas de código à category.php do meu tema logo após o código que exibe o título da categoria:

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

Agradável e fácil e estamos todos prontos. O resultado deve ser semelhante a este:

    
por Bainternet 07.02.2011 / 15:16
fonte
15

A partir do Wordpress 4.4, o add_term_meta () , o update_term_meta () e get_term_meta () foram adicionadas . Isso significa que o código fornecido pelo MxmastaMills pode ser atualizado para usar uma abordagem muito menos hacky.

Aqui está minha atualização. Existe apenas um campo para adicionar um título personalizado, mas funcionará da mesma forma para todos os campos que você deseja adicionar.

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');
    
por Luke Simmons 29.06.2016 / 22:17
fonte
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'] );
});
    
por Mario62RUS 14.01.2018 / 16:01
fonte
1

Paul Menard forneceu um exemplo de como criar e usar o termo meta em seu blog ...
Meta personalizada para novas taxonomias no WordPress 3.0 .

Não há nenhum exemplo de criação da tabela de banco de dados ou verificação de $_POST vars, então você precisará fazer essas pequenas coisas sozinho, mas parece que uma base de código decente é construída em cima de ... :)

    
por t31os 07.02.2011 / 13:51
fonte

Tags