3

私が本当に欲しいのは、メタボックスのデータが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 );
}
4

1 に答える 1

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. Atextareaには がありませんvalue。コンテンツは開始/終了タグ内に入ります。

    echo '<textarea id="testimonial_text" name="testimonial_text" />'.esc_attr($value).'</textarea>';
    
  4. フックsave_postは 2 つの引数を取ります:

    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;
    

フロント エンドで投稿メタを使用するには、単にget_post_meta().

于 2014-06-19T08:57:28.407 に答える