web-dev-qa-db-ja.com

特定のカテゴリの投稿にメタボックスを追加する方法

カテゴリ= 18の投稿にMetaboxを追加したいのですが、次のコードを使用していますが、できません。だから私を助けてください - >

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


}
4
terminator

if ($post_id->post_category[0] == 18)の代わりに試す

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

'save_post'アクションも

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

カテゴリが選択されたときに新しい投稿にメタボックスが表示されるようにするには、外側のカテゴリテストのifステートメントを削除してメタボックスを常に追加し、jqueryを使用して表示/非表示にします。

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
4
bonger