[Решено] Своя переменная wordpress

Тема в разделе "Wordpress", создана пользователем АlexBrain, 14 янв 2014.

  1. АlexBrain

    АlexBrain

    Регистрация:
    15 янв 2013
    Сообщения:
    238
    Симпатии:
    94
    Добрый день!
    Подскажите, как реализовать на wordpress свою переменную, которую можно было бы редактировать через админку.
    Смысл заключается в том, что есть каталог заказа услуг. У каждой услуги есть цена в $.
    Цена * Курс доллара = Цена в рублях. Цена товара меняется за счет изменения курса доллара.

    Курс доллара должен редактироваться менеджером сайта. Хотелось бы, сделать раздел в админке, где можно вводить Курс доллара и сохранять его в таблицу БД, а на страницах заказа услуг подставить переменную, значение которого считывается из нужной таблицы.

    Возможно есть плагин - для реализации чего-то похожего, если кто сталкивался с данной темой подскажите please.
     
  2. web2us

    web2us

    Регистрация:
    10 мар 2013
    Сообщения:
    18
    Симпатии:
    1
    вот что надо
    Все что нам нужно для создания такого блока — это 2 хука: add_meta_boxes (или admin_init) и save_post, а также функция add_meta_box(), плюс немного знаний html и php. Добавляем следующий код в файл темы functions.php:

    1. Создадим новый мета блок для постов (записей типа post) с названием "Дополнительные поля":
    PHP:
    <?php // подключаем функцию активации мета блока (my_extra_fields)
    add_action('add_meta_boxes''my_extra_fields'1);

    function 
    my_extra_fields() {
    add_meta_box'extra_fields''Дополнительные поля''extra_fields_box_func''post''normal''high' );
    }
    2. Заполним этот блок полями html формы, делается это через, указанную в add_meta_box() функциюextra_fields_box_func(). Именно она отвечает за содержание мета блока:
    PHP:
    // код блока
    function extra_fields_box_func( $post ){
    ?>
    <p><label><input type="text" name="extra[title]" value="<?php echo get_post_meta($post->ID'title'1); ?>" style="width:50%" /> ? заголовок страницы (title)</label></p>

    <p>Описание статьи (description):
    <textarea type="text" name="extra[description]" style="width:100%;height:50px;"><?php echo get_post_meta($post->ID'description'1); ?></textarea>
    </p>

    <p>Видимость поста: <?php $mark_v get_post_meta($post->ID'robotmeta'1); ?>
    <label><input type="radio" name="extra[robotmeta]" value="" <?php checked$mark_v'' ); ?> /> index,follow</label>
    <label><input type="radio" name="extra[robotmeta]" value="nofollow" <?php checked$mark_v'nofollow' ); ?> /> nofollow</label>
    <label><input type="radio" name="extra[robotmeta]" value="noindex" <?php checked$mark_v'noindex' ); ?> /> noindex</label>
    <label><input type="radio" name="extra[robotmeta]" value="noindex,nofollow" <?php checked$mark_v'noindex,nofollow' ); ?> /> noindex,nofollow</label>
    </p>

    <p><select name="extra[select]" />
    <?php $sel_v get_post_meta($post->ID'select'1); ?>
    <option value="0">----</option>
    <option value="1" <?php selected$sel_v'1' )?> >Выбери меня</option>
    <option value="2" <?php selected$sel_v'2' )?> >Нет, меня</option>
    <option value="3" <?php selected$sel_v'3' )?> >Лучше меня</option>
    </select> ? выбор за вами</p>

    <input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    <?php
    }
    Все названия полей я оформил в массив extra[], чтобы потом проще было обработать эти данные.

    Спрятанное поле name="extra_fields_nonce", нужно для проверки при сохранении данных.

    3. На этом этапе, мы уже создали блок произвольных полей, теперь нужно обработать данные полей при сохранении поста. Обработать, значит записать их в произвольные поля (в таблицу БД) или наоборот удалить. Для этого используем хук save_post, который срабатывает в момент сохранения поста. В этот момент мы получим данные из массива extra[] и обработаем них:
    PHP:
    <?php
    // включаем обновление полей при сохранении
    add_action('save_post''my_extra_fields_update'0);

    /* Сохраняем данные, при сохранении поста */
    function my_extra_fields_update$post_id ){
    if ( !
    wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false// проверка
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false// выходим если это автосохранение
    if ( !current_user_can('edit_post'$post_id) ) return false// выходим если юзер не имеет право редактировать запись

    if( !isset($_POST['extra']) ) return false// выходим если данных нет

    // Все ОК! Теперь, нужно сохранить/удалить данные
    $_POST['extra'] = array_map('trim'$_POST['extra']); // чистим все данные от пробелов по краям
    foreach( $_POST['extra'] as $key=>$value ){
    if( empty(
    $value) ){
    delete_post_meta($post_id$key); // удаляем поле если значение пустое
    continue;
    }

    update_post_meta($post_id$key$value); // add_post_meta() работает автоматически
    }
    return 
    $post_id;
    }
    ?>
    Вот и все, блок произвольных полей готов!
     
    Lasted edited by : 14 янв 2014
    АlexBrain нравится это.