Wordpress хранит параметры темы - PullRequest
3 голосов
/ 05 марта 2011

В данный момент я храню все опции своей темы по отдельности, используя update_option (имя, значение); функции, но я думаю о том, чтобы поместить их все в массив, сериализовать и сохранить один параметр в базе данных.

Это более эффективно?

Ответы [ 2 ]

4 голосов
/ 05 марта 2011

Да, если вы немного обработаете (читай: unserialize) после того, как перечитали конфигурацию из БД!

В зависимости от количества опций вы сохраните запрос в БД.

1 голос
/ 03 февраля 2012

Сериализация не нужна.Существуют встроенные методы для аккуратного хранения параметров темы в массиве.

Вот полный пример, включающий весь необходимый код:

Во-первых, в файле functions.php вашей темы вынужно зарегистрировать настройки, которые вы будете использовать, написав небольшую функцию и используя ловушку WordPress, чтобы активировать ее:

<?php
    function my_theme_admin_init() {
        register_setting('my_options', 'my_theme_options');
    }

    add_action('admin_init', 'my_theme_admin_init');
?>

Затем, в месте, где вы хотите использовать опции, используйте этот бит HTMLи php.(Обратите внимание, что форма публикуется в файле options.php. Для этого используются встроенные функции WordPress, позволяющие сохранять параметры за вас):

<form method="post" action="options.php">
    <?php 
    // Load the options from the WP db
    $options = get_option('my_theme_options');
    // WP built-in function to display the appropriate fields for saving options
    settings_fields("my_options"); ?>
    <table class="form-table">
        <tr>
            <th scope="row">Facebook URL:</th>
            <td>
                <input type="text" name="my_theme_options[facebook]" size="40" value="<?php echo stripslashes($options["facebook"]); ?>" />
            </td>
        </tr>
        <tr>
            <th scope="row">Twitter URL:</th>
            <td>
                <input type="text" name="my_theme_options[twitter]" size="40" value="<?php echo stripslashes($options["twitter"]); ?>" />
            </td>
        </tr>
        <tr>
            <th scope="row">LinkedIn URL:</th>
            <td>
                <input type="text" name="my_theme_options[linkedin]" size="40" value="<?php echo stripslashes($options["linkedin"]); ?>" />
            </td>
        </tr>
    </table>
    <p class="submit">
        <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
    </p>
</form>
...