Обновление флажка WordPress meta_box не обновляется - PullRequest
0 голосов
/ 04 мая 2020

У меня проблема с обновлением моего пользовательского мета-окна в WordPress для пользовательского сообщения news. Я установил флажок мета-поля, чтобы я мог решить, будет ли публикация опубликована Если флажок установлен, то isFeatured = 1. Пока эта часть не работает, проблема в том, что через некоторое время я не хочу редактировать пост и снимать флажок. После обновления поста флажок установлен постоянно.

База данных: meta_key | meta_value ----> news_details | a:1:{s:10:"isFeatured";s:1:"1";}

Так выглядит мой код:

function add_news_details_meta_box() {
    add_meta_box(
        'news_details_meta_box', // $id
        'Checkbox', // $title
        'show_news_details_meta_box', // $callback
        'news', // $screen
        'normal', // $context
        'high' // $priority
    );
}
add_action( 'add_meta_boxes', 'add_news_details_meta_box' );

function show_news_details_meta_box() {
    global $post;
        $meta = get_post_meta( $post->ID, 'news_details', true ); ?>

  <input type="hidden" name="news_details_meta_box_nonce" value="<?php echo wp_create_nonce( basename(__FILE__) ); ?>">

    <p>
    <label for="news_details[isFeatured]">Is this post featured?
      <input type="checkbox" name="news_details[isFeatured]" value="1" <?php if (is_array($meta) && $meta['isFeatured'] === '1' ) { echo 'checked';} else { echo 'Unchecked';}?>>
    </label>
  </p>

  <?php
}
function save_news_details_meta( $post_id ) {
    // verify nonce
    if ( !wp_verify_nonce( $_POST['news_details_meta_box_nonce'], basename(__FILE__) ) ) {
        return $post_id;
    }
    // check autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    // check permissions
    if ( 'page' === $_POST['post_type'] ) {
        if ( !current_user_can( 'edit_page', $post_id ) ) {
            return $post_id;
        } elseif ( !current_user_can( 'edit_post', $post_id ) ) {
            return $post_id;
        }
    }

    $old = get_post_meta( $post_id, 'news_details', true );
    $new = $_POST['news_details'];
    if ( $new && $new !== $old ) {
        update_post_meta( $post_id, 'news_details', $new );
    } elseif ( '' === $new && $old ) {
        delete_post_meta( $post_id, 'news_details', $old );
    }
}
add_action( 'save_post', 'save_news_details_meta' ); 

Не могли бы вы объяснить мне, что не так с обновить флажок через какое-то время?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Я думаю, вы должны проверить условие if. Как я получил ваше описание, $ meta ['isFeatured'] === '1' всегда становится правдой. Вы устанавливаете значение 1 во входном теге. Таким образом, при сохранении значение 1 сохраняется в поле, я думаю. При следующей загрузке вы проверяете с помощью if, если $ meta ['isFeatured'] равен 1, так что это всегда верно.

Вы можете проверить, установлен ли флажок в форме с помощью:

isset($_POST['name_of_your_checkbox_input'])

Если он установлен, вы сохраняете значение 1. Если нет, вы остаетесь на предварительно определенном значении 0.

0 голосов
/ 07 мая 2020

То, что у меня работало в этом случае, менялось } elseif ( '' === $new && $old ) { на } else ( '' === $new && $old ) {

...