无法使用自定义帖子类型在Wordpress中保存元框数据

时间:2013-07-23 17:13:56

标签: wordpress

我真正想要的是将元框数据保存为A)作为循环内的可访问全局变量,B)将数据保存到文本框中,以便当用户按下更新时,他们所写的内容出现在文本框,直到它再次更新。目前,我知道它不符合B)的标准,我不确定它是否可以作为循环中的全局变量访问。有什么帮助吗?

add_action( 'add_meta_boxes', 'testimonial_text_box' );

function testimonial_text_box() {
    add_meta_box( 
        'testimonial_text_box',
        __( 'Testimonial Text:', 'myplugin_textdomain' ),
        'testimonial_text_box_content',
        'testimonial',
        'normal',
        'high'
    );
}

function testimonial_text_box_content( $post ) {
    $values = get_post_custom( $post->ID );  
    $text = isset( $values['my_meta_box_text'] ) ? esc_attr( $values['my_meta_box_text'][0] ) : ”;  
    $selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'][0] ) : ”;  
    $check = isset( $values['my_meta_box_check'] ) ? esc_attr( $values['my_meta_box_check'][0] ) : ”;  

    wp_nonce_field( plugin_basename( __FILE__ ), 'testimonial_text_box_content_nonce' );
  $value = get_post_meta( $post->ID, '_my_meta_value_key', true );
  echo '<label for="testimonial_text">';
       _e("Text body of the testimonial:", 'myplugin_textdomain' );
  echo '</label> ';
    echo '<br/>';
  echo '<textarea align="top" id="testimonial_text" name="testimonial_text" value="'.esc_attr($value).'" style="width:100%;height:200px;margin:5px -20px 3px 0;" /></textarea>';
}

add_action( 'save_post', 'testimonial_text_box_save' );
function testimonial_text_box_save( $post_id ) {

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
    return;

    if ( !wp_verify_nonce( $_POST['testimonial_text_box_content_nonce'], plugin_basename( __FILE__ ) ) )
    return;

    if ( 'testimonial' == $_POST['post_type'] ) {
        if ( !current_user_can( 'edit_page', $post_id ) )
        return;
    } else {
        if ( !current_user_can( 'edit_post', $post_id ) )
        return;
    }
    $testimonial_text = $_POST['testimonial_text'];
    update_post_meta( $post_id, 'testimonial_text', $testimonial_text );
}

1 个答案:

答案 0 :(得分:1)

代码问题:

  1. 不必要的阻止(与手头的目标无关):

    $values = get_post_custom( $post->ID );  
    $text = isset( $values['my_meta_box_text'] ) ? esc_attr( $values['my_meta_box_text'][0] ) : ”;  
    $selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'][0] ) : ”;  
    $check = isset( $values['my_meta_box_check'] ) ? esc_attr( $values['my_meta_box_check'][0] ) : ”;  
    
  2. 您将testimonial_text保存为:

    update_post_meta( $post_id, 'testimonial_text', $testimonial_text );
    

    但是获得_my_meta_value_key

    $value = get_post_meta( $post->ID, '_my_meta_value_key', true );
    

    get_更改为testimonial_text

  3. textarea没有value,内容会进入打开/关闭代码:

    echo '<textarea id="testimonial_text" name="testimonial_text" />'.esc_attr($value).'</textarea>';
    
  4. 钩子save_post有两个参数:

    add_action( 'save_post', 'testimonial_text_box_save', 10, 2 );
    function testimonial_text_box_save( $post_id, $post ) { /* code */ }
    
  5. 有一个非工作的if / else应该是这样的:

    if ( 'testimonial' !== $post->post_type )        
        return;
    
    if ( !current_user_can( 'edit_post' ) )
        return;
    
  6. 要在前端使用post meta,只需使用get_post_meta()