我真正想要的是将元框数据保存为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 );
}
答案 0 :(得分: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] ) : ”;
您将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
。
textarea
没有value
,内容会进入打开/关闭代码:
echo '<textarea id="testimonial_text" name="testimonial_text" />'.esc_attr($value).'</textarea>';
钩子save_post
有两个参数:
add_action( 'save_post', 'testimonial_text_box_save', 10, 2 );
function testimonial_text_box_save( $post_id, $post ) { /* code */ }
有一个非工作的if / else应该是这样的:
if ( 'testimonial' !== $post->post_type )
return;
if ( !current_user_can( 'edit_post' ) )
return;
要在前端使用post meta,只需使用get_post_meta()
。