Я пытаюсь добавить флажок в свой метафайл в WordPress, и я столкнулся с проблемой с его сохранением – всякий раз, когда я устанавливаю флажок и обновляю сообщение / страницу, он снова не возвращается.
Вот код, который я использую:
add_meta_box( 'sl-meta-box-sidebar', // id 'Sidebar On/Off', // title 'sl_meta_box_sidebar', // callback function 'page', // type of write screen 'side', // context 'low' // priority ); function sl_meta_box_sidebar() { global $meta; sl_post_meta( $post->ID ); ?> <input type="checkbox" name="sl_meta[sidebar]" value="<?php echo htmlspecialchars ($meta['sidebar']); ?>" />Check to turn the sidebar <strong>off</strong> on this page. }
Это создает флажок на боковой панели экрана «Редактировать страницу», как и должно быть, проблем нет. Я не уверен, что мне следует вводить в значение флажка, с текстовыми полями он явно возвращает все, что было сохранено в качестве метаинформации … Я попробовал просто использовать «проверено» вместо этого, потому что это будет моя первая догадка (тогда просто проверьте для значения при использовании этих метаданных), но он также не сохранил этот флажок.
Вот функция, которая сохраняет все метаданные, которые, как я предполагаю, вызывает эту проблему:
function sl_save_meta_box( $post_id, $post ) { global $post, $type; $post = get_post( $post_id ); if( !isset( $_POST[ "sl_meta" ] ) ) return; if( $post->post_type == 'revision' ) return; if( !current_user_can( 'edit_post', $post_id )) return; $meta = apply_filters( 'sl_post_meta', $_POST[ "sl_meta" ] ); foreach( $meta as $key => $meta_box ) { $key = 'meta_' . $key; $curdata = $meta_box; $olddata = get_post_meta( $post_id, $key, true ); if( $olddata == "" && $curdata != "" ) add_post_meta( $post_id, $key, $curdata ); elseif( $curdata != $olddata ) update_post_meta( $post_id, $key, $curdata, $olddata ); elseif( $curdata == "" ) delete_post_meta( $post_id, $key ); } do_action( 'sl_saved_meta', $post ); } add_action( 'save_post', 'sl_save_meta_box', 1, 2 );
Он отлично работает для текстовых полей, но флажок просто не будет сохранен. Я не уверен, что функция сохранения ошибочна, или мне что-то не хватает относительно значения этого флажка.
Любая помощь ценится!
У меня были проблемы с этим раньше, и вот как я это решил.
Сначала создайте флажок.
<?php function sl_meta_box_sidebar(){ global $post; $custom = get_post_custom($post->ID); $sl_meta_box_sidebar = $custom["sl-meta-box-sidebar"][0]; ?> <input type="checkbox" name="sl-meta-box-sidebar" <?php if( $sl_meta_box_sidebar == true ) { ?>checked="checked"<?php } ?> /> Check the Box. <?php } ?>
Затем сохраним.
<?php add_action('save_post', 'save_details'); function save_details($post_ID = 0) { $post_ID = (int) $post_ID; $post_type = get_post_type( $post_ID ); $post_status = get_post_status( $post_ID ); if ($post_type) { update_post_meta($post_ID, "sl-meta-box-sidebar", $_POST["sl-meta-box-sidebar"]); } return $post_ID; } ?>