Добавьте флажок в мета-поле сообщения

Я хочу добавить флажок в тип сообщения о продукте. Итак, я написал код

add_action( 'add_meta_boxes', 'smashing_add_post_meta_boxes' );
/* Create one or more meta boxes to be displayed on the post editor screen. */
function smashing_add_post_meta_boxes() {

  add_meta_box(
    'smashing-post-class',      // Unique ID
    esc_html__( 'Post Class', 'example' ),    // Title
    'smashing_post_class_meta_box',   // Callback function
    'product',         // Admin page (or post type)
    'side',         // Context
    'default'         // Priority
  );
}

/* Display the post meta box. */
function smashing_post_class_meta_box( $object, $box ) { ?>

  <?php wp_nonce_field( basename( __FILE__ ), 'smashing_post_class_nonce' ); ?>

  <p>
    <label for="smashing-post-class"><?php _e( "Add a custom CSS class, which will be applied to WordPress' post class.", 'example' ); ?></label>
    <br />
    <input class="widefat" type="checkbox" name="smashing-post-class" id="smashing-post-class" value="<?php echo esc_attr( get_post_meta( $object->ID, 'smashing_post_class', true ) ); ?>" size="30" />What's New
  </p>
<?php }


/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'smashing_save_post_class_meta', 10, 2 );

/* Save the meta box's post metadata. */
function smashing_save_post_class_meta( $post_id, $post ) {

  /* Verify the nonce before proceeding. */
  if ( !isset( $_POST['smashing_post_class_nonce'] ) || !wp_verify_nonce( $_POST['smashing_post_class_nonce'], basename( __FILE__ ) ) )
    return $post_id;

  /* Get the post type object. */
  $post_type = get_post_type_object( $post->post_type );

  /* Check if the current user has permission to edit the post. */
  if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
    return $post_id;

  /* Get the posted data and sanitize it for use as an HTML class. */
  $new_meta_value = ( isset( $_POST['smashing-post-class'] ) ? sanitize_html_class( $_POST['smashing-post-class'] ) : '' );

  /* Get the meta key. */
  $meta_key = 'smashing_post_class';

  /* Get the meta value of the custom field key. */
  $meta_value = get_post_meta( $post_id, $meta_key, true );

  /* If a new meta value was added and there was no previous value, add it. */
  if ( $new_meta_value && '' == $meta_value )
    add_post_meta( $post_id, $meta_key, $new_meta_value, true );

  /* If the new meta value does not match the old value, update it. */
  elseif ( $new_meta_value && $new_meta_value != $meta_value )
    update_post_meta( $post_id, $meta_key, $new_meta_value );

  /* If there is no new meta value but an old value exists, delete it. */
  elseif ( '' == $new_meta_value && $meta_value )
    delete_post_meta( $post_id, $meta_key, $meta_value );
}

Как я могу изменить код, чтобы получить значение флажка и проверить, установил ли кто-нибудь флажок раньше.

Здесь я изменил только поле ввода «текст» на «флажок». Но я не знаю, что делать, чтобы создать один флажок. Помогите мне, пожалуйста. Я новичок в вордпресс.


person user3747821    schedule 22.07.2014    source источник


Ответы (1)


вам, вероятно, нужно присвоить значение для флажка. Возможно, вы захотите подумать, что это за значение, если оно еще не установлено.

value="<?php echo esc_attr( get_post_meta( $object->ID, 'smashing_post_class', true ) ); ?>"

на новом посту это не установлено. Таким образом, вы можете сделать что-то вроде

value="<?php if ($x=get_post_meta( $object->ID, 'smashing_post_class', true ) ) {echo $x;}else{echo "whatever";} ?>"

Вы уже сохраняете значение в post_meta (см. $new_meta_value), поэтому код для установки значения уже извлекает его из базы данных, если он существует.

возможно, вы захотите переосмыслить то, как вы делаете вышеизложенное. Теперь значение флажка всегда будет одинаковым. Вы также можете установить значение на то, что вы хотите, чтобы оно было прямо сейчас. Например.

<input type="checkbox" name="whatever" value="true"> select me for fun

вы можете получить доступ к опубликованному значению в функции сохранения мета-поля

$value= $_POST['whatever'];

и сохраните метаданные публикации (отдельная таблица базы данных для пользовательских значений и нескольких других значений, которые не подходят для wp_posts)

update_post_meta($post_id, '_keyname', $value);
person David    schedule 22.07.2014