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

Вопрос:

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

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 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 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 );
}

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

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

Ответ №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'];

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

update_post_meta($post_id, '_keyname', $value);

Оцените статью
TechArks.Ru
Добавить комментарий