echo or print_r in an admin function

I’m currently working my first plugin (to deal with my CPT) and am at the process of saving the values of a meta box.

I wish to add an underscore (_) to the meta key so that it is hidden on the custom field part.

I have some trouble to get the data saved when this _ is added (no problem when there’s no _).

So I try to investigate what goes in the meta array, but I can’t manage to have an echo or print_r within a function in my plugin that would print on my admin page.

I have wrote the following

function ccp_portfolio_item_info_meta_box_save( $post_id, $post ) {

    if ( !isset( $_POST['ccp-portfolio-item-info-nonce'] ) || !wp_verify_nonce( $_POST['ccp-portfolio-item-info-nonce'], basename( __FILE__ ) ) )
        return;

    $meta = array(
        '_portfolio_item_url' => esc_url( $_POST['ccp-portfolio-item-url'] )
    );

    print_r($meta);
    // ccp_split_meta_save ($meta, $post_id, $post); // calling my function to split the metas
}

but that would not print my $meta on top of my admin page, what am I doing wrong?

@brasofilo

thank you for your answer

first my form is as follow

function ccp_portfolio_item_info_meta_box_display( $post, $metabox ) {

    wp_nonce_field( basename( __FILE__ ), 'ccp-portfolio-item-info-nonce' ); ?>

    <p>
        <label for="ccp-portfolio-item-url"><?php _e( 'Project <abbr title="Uniform Resource Locator">URL</abbr>', 'custom-content-portfolio' ); ?></label>
        <br />
        <input type="text" name="ccp-portfolio-item-url" id="ccp-portfolio-item-url" value="<?php echo esc_url( get_post_meta( $post->ID, '_portfolio_item_url', true ) ); ?>" size="30" tabindex="30" style="width: 99%;" />
    </p>
    <?php

    /* Allow devs to hook in their own stuff here. */
    do_action( 'ccp_item_info_meta_box', $post, $metabox );
}

then my save function is :

function ccp_portfolio_item_info_meta_box_save( $post_id, $post ) {

    if ( !isset( $_POST['ccp-portfolio-item-info-nonce'] ) || !wp_verify_nonce( $_POST['ccp-portfolio-item-info-nonce'], basename( __FILE__ ) ) )
        return;

    $meta = array(
        '_portfolio_item_url' => esc_url( $_POST['ccp-portfolio-item-url'] )
    );


    ccp_split_meta_save ($meta, $post_id, $post); // calling my function to split the metas
}

up to there all is fine, when I print_r the $metal, it show the right thing

then within the previous function I call this one

function ccp_split_meta_save ($meta, $post_id, $post) {

echo 'je suis dans ccp_split_meta_save <br />';
print_r($meta);
    //exit();

    foreach ( $meta as $meta_key => $new_meta_value ) {

            /* Get the meta value of the custom field key. */
            $meta_value = get_post_meta( $post_id, $meta_key, true );

            echo '<br />la meta key est '.$meta_key.'</ br>';
            echo '<br />la meta value  est '.$meta_value.'</ br>';
            // exit();

            /* If there is no new meta value but an old value exists, delete it. */
            if ( current_user_can( 'delete_post_meta', $post_id, $meta_key ) && '' == $new_meta_value && $meta_value )
                {//delete_post_meta( $post_id, $meta_key, $meta_value );
                echo '<br />je suis dans delete <br />';
                }

            /* If a new meta value was added and there was no previous value, add it. */
            elseif ( current_user_can( 'add_post_meta', $post_id, $meta_key ) && $new_meta_value && '' == $meta_value )
            {
                //{add_post_meta( $post_id, $meta_key, $new_meta_value, true );
                //echo '<br /> c est une nouvelle meta value <br />'; exit();
                echo '<br />je suis dans add <br />';
            }   
                //}

            /* If the new meta value does not match the old value, update it. */
            elseif ( current_user_can( 'edit_post_meta', $post_id, $meta_key ) && $new_meta_value && $new_meta_value != $meta_value )
            {   //update_post_meta( $post_id, $meta_key, $new_meta_value );
                echo '<br />je suis dans update <br />';
            }
            else 
            {
            echo '<br /><b>je suis nul part</b> <br />';
            echo 'add_post_meta : ' .current_user_can( 'add_post_meta', $post_id, $meta_key ).'<br />';
            }

    exit();
    }

}

as you see it is a working/denug function since I have put some pointer to see where my datas are

the strange thing is that if I have

$meta = array(
‘portfolio_item_url’ => esc_url( $_POST[‘ccp-portfolio-item-url’] )

then it goes well to
elseif ( current_user_can( ‘add_post_meta’, $post_id, $meta_key ) && $new_meta_value && ” == $meta_value )
so a new entry is add to the db

if I have

$meta = array(
‘_portfolio_item_url’ => esc_url( $_POST[‘ccp-portfolio-item-url’] )

then it goes to my last else, which means nowhere

if I print
$meta_value = get_post_meta( $post_id, $meta_key, true );

then it well return an empty value so that would direct me to

        /* If a new meta value was added and there was no previous value, add it. */
        elseif ( current_user_can( 'add_post_meta', $post_id, $meta_key ) && $new_meta_value && '' == $meta_value )
        {
            //{add_post_meta( $post_id, $meta_key, $new_meta_value, true );
            //echo '<br /> c est une nouvelle meta value <br />'; exit();
            echo '<br />je suis dans add <br />';
        }   

but no it is not

I just don’t understant that why adding only the underscore makes trouble

thank you in advance for your help

@ toscho, sorry I did not really understand how to update my question, but it looks like I found out.. thank you and sorry for my rookiness

Solutions Collecting From Web of "echo or print_r in an admin function"