Como adicionar metabox para postagem de categoria específica

4

Eu quero adicionar o Metabox para as postagens da categoria = 18 e estou usando o código a seguir, mas não consigo fazer isso. Então, por favor, ajude-me… >

 add_action('admin_init','my_meta_init');

function my_meta_init()
{
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;

    // checks for post/page ID
    if ($post_id->post_category[0] == 18)
    {
        add_meta_box('team_meta', 'My Custom Meta Box 1', 'team_meta_1', 'post', 'normal', 'high');


    function team_meta_1(){
    global $post;
    // Noncename needed to verify where the data originated
    echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' . 
    wp_create_nonce( plugin_basename(__FILE__) ) . '" />';

    // Get the location data if its already been entered
    $designation = get_post_meta($post->ID, '_designation', true);

    // Echo out the field
    // echo '<input type="text" name="_description" value="' . $description  . '" />';
    echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';

    }

    function my_meta_save($post_id, $post) {

    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) {
    return $post->ID;
    }

    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post->ID ))
        return $post->ID;

    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though.

    $events_meta['_designation'] = $_POST['_designation'];


    // Add values of $events_meta as custom fields

    foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array!
        if( $post->post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
        if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
            update_post_meta($post->ID, $key, $value);
        } else { // If the custom field doesn't have a value
            add_post_meta($post->ID, $key, $value);
        }
        if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
    }

}

 add_action('save_post','my_meta_save');
}


}
    
por terminator 31.07.2014 / 21:59

1 resposta

4

Em vez de if ($post_id->post_category[0] == 18) try

if ( $post_id && in_category( 18, $post_id ) )

Além disso, a ação 'save_post' deve ser

 add_action('save_post','my_meta_save', 10, 2);

Se você quiser que o metabox apareça em um novo post quando a categoria for selecionada, remova o teste de categoria externa se a instrução para que o metabox seja sempre adicionado e depois mostre / oculte usando jquery (coloque isso após o eco do textarea)

echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';
?>
<script type="text/javascript">
jQuery(document).ready(function() {
    (function ($) {
        $('#in-category-18').change(function () { $('#team_meta').toggle(this.checked); }).change();
    })(jQuery);
});
</script>
<?php
    
por bonger 31.07.2014 / 23:44