Если поискать на бирже upwork работы по запросу wordpress, можно найти много, очень много возможностей заработать. Создание сайтов на WordPress — простой способ начать зарабатывать деньги на этих биржах, да и в целом для небольших сайтов WordPress может стать хорошим решением.
У меня давно припасены несколько сайтов, которые находятся на стадии вёрстка. Думаю мне интересно сделать из них готовый шаблон для CMS. Первой на очереди WordPress (далее Битрикс). Сайт будет простой посадочной страницей для мероприятия. Присутствуют форма регистрации и карта, всё настраивается из панели администратора.
Для настроек темы буду использовать Theme Customization API это набор методов для расширения страницы настроек темы.
Страница настроек шаблоны
В файле functions.php зарегистрируйте новый обработчик события customize_register и колбэк который принимает объект управления настройками. Он имеет методы : add_section, add_setting, и add_control.
add_section — добавить раздел настроек
1 2 3 4 5 6 7 8 9 10 |
add_action('customize_register', function($customizer){ $customizer->add_section( 'contact_form_section', // Уникальный идентификатор array( 'title' => 'Contact form', // Название раздела 'description' => '', // Описание раздела 'priority' => 11, // Приоритет ) ); ); |
add_setting — добавить настройку
1 2 3 4 5 6 7 8 |
$customizer->add_setting( 'contact_form',// Уникальный идентификатор array( 'type' => 'theme_mod' или 'option', // Опционально, по-умолчанию theme_mod 'default' => '' // Значение по-умолчанию 'capability' => 'edit_theme_options' // Права которыми должен обладать пользователь для изменения этого параметра ) ); |
add_control — добавить контрол
1 2 3 4 5 6 7 8 9 10 11 12 |
$customizer->add_control( 'contact_form', array( 'label' => 'Google Map', // Заголовок контрола 'section' => 'contact_form_section', // Идентификатор секции в которую необходимо вставить контрол 'type' => 'text', // Тип контрола, text, select, radio, checkbox, 'choices' => array( 'left' => 'left', 'right' => 'right' ) // Возможные варианты для контролов типа select или radio ) ); |
Вывести в теме значения настроек очень просто — get_theme_mod(‘идентификатор_контрола’)
Новые типы постов
На самом деле добавлять новые типы постов прямо в теме не рекомендуется. И более того, если вы создаёте шаблон для wordpress.org такую тему не пропустят,я не знал. Хотя вот и понять не могу, что делать если мне в теме необходимы специальные типы контента, остаётся разделять контент по разным категориям и фильтровать по ним.
Но на всякий случай, как же создавать новые типы постов ([подробнее](https://codex.wordpress.org/Function_Reference/register_post_type)) или [register_post_type](https://developer.wordpress.org/reference/functions/register_post_type/):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
add_action( 'init', 'create_features_and_citate_types'); // Хук который сработает в момент инициализиации function create_features_and_citate_types() { register_post_type( 'features', // идентификатор типа array( 'labels' => array( 'name' => 'Features', // Заголовок для множества объектов 'singular_name' => 'Feature' // Заголовок для одного объекта ), 'public' => true, 'has_archive' => true, 'supports' => array('title', 'editor', 'thumbnail'), 'exclude_from_search' => true, // Убрать из поиска 'menu_icon' => 'dashicons-video-alt', // Иконка ) ); }; |
Необходимые для работы плагины
В большинстве случаев для создания темы вам понадобится дополнительный функционал, как например карты или форма контактов. Было бы странно писать свой велосипед, когда существует масса готовых и проверенных решений. И ребята из [TGM создали простой способ](https://github.com/TGMPA/TGM-Plugin-Activation) показать пользователю список необходимых плагинов.
Включите файл TGM скаченный с гитхаба в свой functions.php и перечислите список необходимых плагинов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<? // Add required plugins require_once dirname( __FILE__ ) . '/class-tgm-plugin-activation.php'; add_action( 'tgmpa_register', 'register_required_plugins' ); function register_required_plugins() { $plugins = array( array( 'name' => 'contact-form-7', 'slug' => 'contact-form-7', 'required' => true, 'version' => '', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '', 'is_callable' => '', ), array( 'name' => 'wp-google-maps', 'slug' => 'wp-google-maps', 'required' => true, 'version' => '', 'force_activation' => false, 'force_deactivation' => false, 'external_url' => '', 'is_callable' => '', ) ); tgmpa( $plugins); }; ?> |