私は次のコードを参照してくださいページのメタボックスを作成しました:
add_action('add_meta_boxes', 'add_metaboxes');
function add_metaboxes() {
add_meta_box(
'wpt_slider_meta',
'Add Slider Image',
'wpt_slider_meta',
'slider',
'normal',
'default'
);
}
function wpt_slider_meta() {
global $post;
wp_nonce_field(plugins_url(__FILE__), 'meta_slider_noncename');
$values = get_post_meta($post->ID, '_meta-slider_img', true);
// Some html and scripts to upload image.
}
add_action( 'save_post', 'save_slider_img' );
function save_slider_img( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( 'slider' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ) )
return;
} else {
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
if(wp_verify_nonce($_POST['meta_slider_noncename'], plugins_url(__FILE__)) )
{
$images = $_POST['meta-slider_img'];
update_post_meta( $post_id, '_meta-slider_img', $images );
}
}
[新しいページを追加]をクリックすると、2つの警告が表示されます。これを除けば、すべてのコードは問題なく動作します。
Notice: Undefined index: post_type in /var/www/html/transport/wp-content/themes/transport/functions.php on line 192
Notice: Undefined index: meta_slider_noncename in /var/www/html/transport/wp-content/themes/transport/functions.php on line 200
誰でも手伝える?
postが挿入または更新されたときにsave_post
が呼び出されます。新しい投稿にアクセスすると投稿が作成されデータベースに挿入されます。それは実際には下書きです。その時点では$_POST
は空白なので、警告が出ています。
解決策:
最善の選択肢は、nonce
が見つからないとすぐに関数を終了することです。そしてisset()
を使ってキーが存在するかどうかをチェックします。
例:
function save_slider_img( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if (!isset($_POST['meta_slider_noncename'])) {
return;
}
if(!wp_verify_nonce($_POST['meta_slider_noncename'], plugins_url(__FILE__))) {
return;
}
if ('slider' == $_POST['post_type'] && current_user_can( 'edit_page', $post_id )) {
$images = isset($_POST['meta-slider_img']) ? $_POST['meta-slider_img'] : false;
update_post_meta( $post_id, '_meta-slider_img', $images );
}
}