phpwordpresscustom-post-typemeta-boxes

Wordpress saving metabox dara don't work


this is all my code....probably i did something wrong cause the save function don't work. i don't where and how a did a mistake.. I created the CPT and the metaboxes for the speakers selection with select item multiple and another metabox with the details for the radio streaming....probably i putted many meta_boxes...i don't know help me

<?php
add_action('init', 'speaker_manager');

function speaker_manager() {
    $labels = array(
        'name'               => __('Speakers'),
        'singular_name'      => __('speaker'),
        'add_new'            => __('Aggiungi Speaker'),
        'add_new_item'       => __('Nuovo Speaker'),
        'edit_item'          => __('Modifica Speaker'),
        'new_item'           => __('Nuovo Speaker'),
        'all_items'          => __('Elenco Speaker'),
        'view_item'          => __('Visualizza '),
        'search_items'       => __('Cerca '),
        'not_found'          => __('Speaker non trovato'),
        'not_found_in_trash' => __('Speaker non trovato nel cestino'),
        );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'show_ui'    => true,
        'rewrite'            => array('slug' => 'speaker'),
        'publicly_queryable' => true,
        'has_archive'        => true,
        'capability_type' => 'post',
        'hierarchical'       => false,
        'menu_icon' => get_stylesheet_directory_uri() . '/images/speakers.png',
        'menu_position'      => 5,
        'supports'           => array(
        'title',
        'editor',
        'thumbnail'
        ),
        );

    register_post_type('speaker', $args);
}

if (function_exists('add_theme_support')) {
    add_theme_support('post-thumbnails');
    set_post_thumbnail_size( 220, 150 );
}

add_action("admin_init", "speaker_manager_add_meta");

function speaker_manager_add_meta(){
    add_meta_box("speaker-meta", "Social",   "speaker_manager_meta_options", "speaker",   "normal", "high");
}

function speaker_manager_meta_options($post)
{
    ?>
        <p>Aggiungi i profili social:</p>
        <p><label for="speaker_social_link">Link al sito</label>
        <input type="text" id="speaker_social_link" name="speaker_social_link"
        value="<?php echo get_post_meta($post->ID, 'speaker_social_link', true); ?>"/></p>

    <?php
}

add_action('save_post', 'save_speaker_social_link');
function save_speaker_social_link($post_id)
{
    global $post;
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ){
        //if you remove this the sky will fall on your head.
        return;
    }else{
        update_post_meta($post_id, 'speaker_social_link',   esc_url($_POST['speaker_social_link']));

    }
}

add_filter('manage_speaker_posts_columns', 'columns_speaker');
function columns_speaker($old_columns)
{
    $speaker_col = array(
        'cb'     => '<input type="checkbox">',
        'img'    => 'Immagine',
        'title'  => __('Speakers'),
        'link' => 'link',
        );
    return $speaker_col;
}

add_action('manage_speaker_posts_custom_column', 'get_speaker_columns', 10, 2);
function get_speaker_columns($col, $post_id)
{
    switch($col) {
        case 'img':
        if(has_post_thumbnail($post_id)) {
            echo get_the_post_thumbnail($post_id);
        } else {
            echo 'Nessuna immagine!';
        }
        break;
        case 'link':
        echo get_post_meta($post->ID, 'speaker_social_link', true);
        default:
        break;
    }
}

Solution

  • Your code is saving the field in the meta box, but you should look for good examples of add_meta_box + save_post at WPSE.

    For the columns, you should not replace the originals but add your own (and you don't need cb):

    function columns_speaker($old_columns)
    {
        $new_columns = array(
            'img'    => 'Immagine',
            'title'  => __('Speakers'),
            'link' => 'link',
        );
        return array_merge( $new_columns, $old_columns );
    }
    

    In get_speaker_columns you got an error, it's not $post->ID but $post_id.