Intereting Posts
Почему WordPress 4.2.2 требует обновления FTP? Использовать wp init hook для вызова других крючков? Использование google graph api с wordpress Использование условий OR в meta_query для аргумента query_posts Выпадающий список «Фильтровать по категориям» с пользовательскими таксономиями Как написать отдельный файл PHP в настройках плагина Как создать собственный .php-файл с частью кода и повторить его на разных страницах? Возвращать ключи массива и значения Значение загрузки изображений Metabox Не удалось вызвать другой крючок из элемента init Ссылка на последнюю дочернюю страницу Предупреждение. Произошла непредвиденная ошибка. Что-то может быть неправильно с WordPress.org Force WP игнорировать несколько пробелов Как отключить пользовательскую ссылку поля «вложение» из сообщения в сообщении Как добавить фиксированную позицию в класс меню для темы Twenty Twelve?

Как установить параметр темы по умолчанию после установки темы?

Я использую класс, чтобы добавить страницу темы темы к моей теме.

Мне нужно установить некоторые значения по умолчанию при активации или установке темы, так как некоторые из этих значений являются строками, и если я попытаюсь получить эту опцию с помощью get_option , я не буду знать, действительно ли пользователь оставил их пустыми или не установлен на все.

 <?php class Theme_Options { public function __construct() { // We only need to register the admin panel on the back-end if ( is_admin() ) { add_action( 'admin_menu', array( 'Theme_Options', 'add_admin_menu' ) ); add_action( 'admin_init', array( 'Theme_Options', 'register_settings' ) ); } } // Returns all theme options public static function get_theme_options() { return get_option( 'theme_options' ); } // Returns single theme option public static function get_theme_option_value( $id ) { $options = self::get_theme_options(); if ( isset( $options[$id] ) ) { return $options[$id]; } } // Add sub menu page public static function add_admin_menu() { add_menu_page( esc_html__( 'Theme\'s Options', 'sample' ), esc_html__( 'Theme\'s Options', 'sample' ), 'manage_options', 'theme-settings', array( 'Theme_Options', 'create_admin_page' ) ); } // Register a setting and its sanitization callback. public static function register_settings() { register_setting( 'theme_options', 'theme_options', array( 'Theme_Options', 'sanitize' ) ); } // Sanitization callback public static function sanitize( $options ) { // If we have options lets sanitize them if ( $options ) { // Input if ( ! empty( $options['sample_input'] ) ) { $options['sample_input'] = sanitize_text_field( $options['sample_input'] ); } else { unset( $options['sample_input'] ); // Remove from options if empty } } // Return sanitized options return $options; } // Settings page output public static function create_admin_page() { ?> <div class="wrap"> <form method="post" action="options.php"> <?php settings_fields( 'theme_options' ); ?> <table class="form-table"><tbody> <tr> <th scope="row"> <?php esc_html_e( 'Sample input', 'sample' ); ?> </th> <td> <?php $value = self::get_theme_option_value( 'sample_input' ); ?> <input type="text" name="theme_options[sample_input]" value="<?php echo esc_attr( $value ); ?>"> </td> </tr> </tbody></table> <?php submit_button(); ?> </form> </div> <?php } } new Theme_Options(); // Helper function to use in theme to return a theme option value function get_theme_option( $id = '' ) { return Theme_Options::get_theme_option_value( $id ); }?> 

Примечание. Я удалил много ненужных строк, чтобы избежать слишком большого вопроса

Поскольку класс хранит сериализованные данные, я думал, что не самая лучшая идея просто сохранить строку по умолчанию в базе данных.

Есть ли способ запустить этот класс при активации и сохранить некоторые значения по умолчанию?

Вместо того, чтобы использовать крючок для хранения значений по умолчанию, вы можете написать логику прямо в get_theme_options – если значение false , еще нет сохраненных параметров:

 public static function get_theme_options() { $options = get_option( 'theme_options' ); if ( $options === false ) { $options = [ 'key' => 'default_value', ]; add_option( 'theme_options', $options ); } return $options; }