我想做的是在post editor区域中从metabox(确切地说是一个数字)中获取输入,并将其保存到我之前创建的自定义表中。
这是我的代码,用于仅为post类型声明元盒:
function silly_metabox()
{
$post_types = array( \'post\' );
foreach( $post_types as $type )
{
add_meta_box(
\'silly_metabox\',
\'Silly Metabox\',
\'silly_display_metabox\',
$type
);
}
}
add_action( \'add_meta_boxes\', \'silly_metabox\' );
同时,metabox的标记是:
function silly_display_metabox( $post )
{
wp_nonce_field( basename( __FILE__ ), \'silly_extrnum_nonce\' );
?>
<label for="sillyNum">Silly Number</label>
<input type="number" id="sillyNum" placeholder="Write a number...">
<?php
}
最后但并非最不重要的一点是保存所有内容的功能:
function silly_save_metabox( $post_id )
{
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = false;
if ( isset( $_POST[ \'silly_extrnum_nonce\' ] ) )
{
if ( wp_verify_nonce( $_POST[ \'silly_extrnum_nonce\' ], basename( __FILE__ ) ) )
{
$is_valid_nonce = true;
}
}
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
if (array_key_exists( \'sillyNum\', $_POST ) )
{
global $wpdb;
$wpdb->insert($wpdb->prefix . \'sillydata\', array(
\'post_id\' => $post_id,
\'silly_number\' => $_POST[\'sillyNum\']
));
}
}
add_action( \'save_post\', \'silly_save_metabox\' );
把现场消毒放在一边一分钟,为什么
$_POST
数组不包含
sillyNum
键和插入操作失败或未执行?
SO网友:Sid
这个$_POST[\'\']
必须包含输入字段的name属性,而不是ID。
因此,要修改您的代码:
function silly_display_metabox( $post )
{
wp_nonce_field( basename( __FILE__ ), \'silly_extrnum_nonce\' );
?>
<label for="sillyNum">Silly Number</label>
<input type="number" id="sillyNum" name="sillyNum" placeholder="Write a number...">
<?php
}
以及
function silly_save_metabox( $post_id )
{
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = false;
if ( isset( $_POST[ \'silly_extrnum_nonce\' ] ) )
{
if ( wp_verify_nonce( $_POST[ \'silly_extrnum_nonce\' ], basename( __FILE__ ) ) )
{
$is_valid_nonce = true;
}
}
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
if (array_key_exists( \'sillyNum\', $_POST ) )
{
global $wpdb;
$wpdb->insert($wpdb->prefix . \'sillydata\', array(
\'post_id\' => $post_id,
\'silly_number\' => $_POST[\'sillyNum\']
));
}
}
add_action( \'save_post\', \'silly_save_metabox\' );
如果有帮助,请告诉我。