• Подскажите, надо сделать чекбокс в метабоксе. (по выводу дочерних страниц внизу контента)
    делаю все, как для всех метабоксов.
    Не выходит.

    add_action('add_meta_boxes', 'meta_init');
    add_action('save_post', 'meta_save'); 
    
    function education_init() {
    add_meta_box('show_children', 'Name',
    'meta_showup', 'post-type', 'side', 'low');
    } 
    
    function meta_showup($post, $box) { 
    
    // получение существующих метаданных
    $show_children = get_post_meta($post->ID, '_show_children', true); 
    
    wp_nonce_field('meta_action', 'meta_nonce'); 
    
    // поле с метаданными 
    
    ?>
    <div style="display:inline-block; width:100%;">
    
    <table style="width:100%">
    
    <tr>
    <td>
    
                <input type="checkbox" name="show_children" id="show_children" value="yes" <?php if ( isset ( $show_children ) ) checked( $show_children, 'yes' ); ?> />
    
    </td>
    <td style="width:80%; text-align:left;">Показывать список дочерних страниц и <?php echo $show_children; ?></td>
    </tr>
    
    </table>
    
    </div>
    <?php
    
    } 
    
    function meta_save($postID) { 
    
    // не происходит ли автосохранение?
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
    return; 
    
    // не ревизию ли сохраняем?
    if (wp_is_post_revision($postID))
    return; 
    
    // пришло ли поле наших данных?
    if(!isset($_POST['show_children']))
    return; 
    
    $show_children = sanitize_text_field($_POST['show_children']);
    
    // Checks for input and saves
     update_post_meta( $post_id, '_show_children', $show_children );
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    add_action('add_meta_boxes', 'meta_init');

    У вас функция называется education_init(), а не meta_init().

    Не выходит.

    Что именно не выходит?

    У вас функция называется education_init(), а не meta_init().

    да, в коде все правильно.
    Тут не все изменил.

    Чекбокс выделен. Когда снимаю и сохраняю, он все равно выделен.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Эта проверка некорректна — если чекбокс не отмечен, тут всегда будет выход:

    // пришло ли поле наших данных?
    if(!isset($_POST['show_children']))
    return;

    Попробуйте конец функции переписать так:

    // пришло ли поле наших данных?
    $show_children = isset($_POST['show_children']);
    
    // Checks for input and saves
    update_post_meta( $post_id, '_show_children', $show_children );

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    И проверка при выводе чекбокса тоже некорректна:

    // получение существующих метаданных
    $show_children = get_post_meta($post->ID, '_show_children', true);
    ...
    <?php if ( isset ( $show_children ) ) checked( $show_children, 'yes' ); ?>

    Переменная $show_children определена, поэтому условие isset() всегда будет выполняться. Его нужно заменить на !empty() или просто if ( $show_children ).

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «checkbox в metabox» закрыта для новых ответов.