В метабоксе WordPress Как сохранить отмеченный переключатель после обновления поста

Я создал метабокс, который можно использовать для добавления боковой панели к сообщению. Функция get_sidebar будет добавлена ​​в шаблон сообщения с помощью оператора if в зависимости от того, проверяет ли пользователь переключатель боковой панели или нет, но я еще не зашел так далеко.

Пока что метабокс отображается на экране редактора, но когда я проверяю переключатель на боковой панели, он возвращается неотмеченным после обновления сообщения.

Это то, что я использую, чтобы держать переключатель после обновления сообщения.

$layout = $_POST["layout"]; 
<input type="radio" name="layout" <?php if (isset($layout) && $layout=="right-sidebar") echo "checked"; ?> value="right-sidebar">

Это полный код, который я использую для создания и обновления метабокса:

<?php

function hill_add_layout_metabox() {

    add_meta_box(
        'layout_metabox',
        'Layout1',
        'hill_callback_layout_matabox',
        'post',
        'side',
        'high'
    );
}

add_action('add_meta_boxes', 'hill_add_layout_metabox');

function hill_callback_layout_matabox() {
    $layout = $_POST["layout"]; 
    ?>
    <input type="radio" name="layout" <?php if (isset($layout) && $layout=="right-sidebar") echo "checked"; ?> value="right-sidebar">  Right Sidebar

    <?php
}

function hill_save_layout_metabox($post_id) {
    $is_autosave = wp_is_post_autosave ( $post_id );
    $is_revision = wp_is_post_revision ( $post_id );

    if ( $is_autosave || $is_revision ) {
        return;
    }

    $layout = $_POST["layout"];

    if (isset($layout) && $layout=="right-sidebar") {
        update_post_meta( $post_id, $layout );
    }
}

add_action('save_post', 'hill_save_layout_metabox');

?>

person Fabian Amran    schedule 14.05.2016    source источник


Ответы (2)


Как добавить пользовательский метабокс в сообщение. Обратитесь к ссылкам ниже, это решит вашу проблему.

https://www.smashingmagazine.com/2011/10/create-custom-post-meta-boxes-wordpress/

http://code.tutsplus.com/tutorials/how-to-create-custom-wordpress-writemeta-boxes--wp-20336

http://www.sitepoint.com/adding-custom-meta-boxes-to-wordpress/

person Manthan Dave    schedule 14.05.2016
comment
Спасибо, что собрали эти ссылки для меня, но я прочитал все три статьи, прежде чем использовать этот сайт. - person Fabian Amran; 14.05.2016

Во-первых, при сохранении мета-значения добавьте значение для сохранения:

Это вопрос предпочтений, но я установлю значение «включено», если выбрано другое «».

$value = isset($layout) && $layout=='right-sidebar' ? 'on' : ''
update_post_meta( $post_id, 'right-sidebar', $value  );

После обновления поста получите значение, которое вы сохранили с помощью get_post_meta, и при необходимости установите переключатель; для этого удобна функция WP checked():

<?php $check = get_post_meta( $post_id, 'right-sidebar', true ); ?>
<input type="radio" name="layout" <?php checked( $check, 'on' ); ?> value="right-sidebar">
person BillK    schedule 14.05.2016
comment
Спасибо @Billk, я попытался сделать то, что вы предложили, и ничего не изменилось. Может быть, я что-то неправильно понял. Предполагается, что в первой строке кода, которым вы поделились в первом блоке, должна быть точка с запятой? - person Fabian Amran; 14.05.2016
comment
Точка с запятой является частью троичного оператора, сокращения для if: еще. Если $layout соответствует условиям, сохраните «on» в мета-таблице, иначе (:) сохраните пустую строку. Похоже, ваш исходный код не получает значение мета-кнопки из базы данных. Вы использовали phpMyAdmin для поиска в своей базе данных? - person BillK; 15.05.2016