Всем привет! Хочу поделится своей наработкой для WordPress разработчиков.
Долгое время, я работал в web студии, где натяжка шаблона html на WordPress была поставлена на поток.
Я решил упростить жизнь себе и коллегам. Короче говоря, создал свой набор методов для работы с WordPress, что бы все быстрее делать.
Оформил все в виде плагина и отправил в репозиторий WordPress. Плагин успешно приняли, вот ссылка.
Что умеет Framework?
1. Работа с мета полями.
Мне постоянно приходилось создавать мета поля. Делал их либо ручками, либо через плагин типа Pods. Если это текстовое поле, то ладно. А вот если select или checkbox, вот тут сложнее. Но с использованием SP Framework все стало гораздо проще, да и код стал лучше.
Мета поля можно создавать для: пост-тайпов, таксономий и пользователей.
Типы полей: текстовые, числовые, select, checkbox, изображения и яндекс карта
$spMB = new SP_Framework_Post_Type_Meta_Box(); $args = array( 'post_type' => 'custom_post_type', 'name' => 'settings_name', 'label' => 'Some Settings', 'validate' => 'y', 'sanitize' => 'n', 'fields' => array( 'text' => array( 'type' => 'text', 'name' => 'text_name', 'label' => 'text', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), 'number' => array( 'type' => 'number', 'name' => 'number_name', 'label' => 'number', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), ), ); $spMB->create($args);
2. Создание Таксономий и Пост-тайпов.
Я добавил возможность создание таксономий и пост-тайпов через SP Framework, что бы сохранить единый стиль написания кода проекта. Код напоминает стандартный способ создания.
$spPT = new SP_Framework_Post_Type(); $args = array( 'name' => 'custom_post_type', 'slug' => 'custom_post_type_slug', 'label' => 'Custom Post Type', 'all_items' => 'All', 'add_new' => 'Add', 'add_new_item' => 'Add', 'edit_item' => 'Edit', 'new_item' => 'New', 'view_item' => 'View', 'view_items' => 'View', 'search_items' => 'Search', 'not_found' => 'Not found', 'not_found_in_trash' => 'Not found in trash', 'menu_icon' => 'dashicons-format-image', 'supports' => array('title', 'thumbnail', 'editor'), 'hidden' => 'y', ); $spPT->create($args);
$spCT = new SP_Framework_Taxonomy(); $args = array( 'taxonomy' => 'my_taxonomy', 'post_type' => 'custom_post_type', 'name' => 'Custom taxonomy', 'singular_name' => 'Custom taxonomy', 'menu_name' => 'Custom taxonomy', 'all_items' => 'All', 'edit_item' => 'Edit', 'view_item' => 'View', 'update_item' => 'Update', 'add_new_item' => 'Add', 'new_item_name' => 'New', ); $spCT->create($args);
3. Кастомайзер
Стандартный способ создание полей в Кастомайзере мне не нравился. Я сделал удобнее.
$spCC = new SP_Framework_Customizer(); $args = array( 'name' => 'sp_framework', 'priority' => 99, 'title' => 'SP Framework', 'description' => 'SP Framework', 'section' => array( 'about' => array( 'name' => 'section_name', 'title' => 'Some Section', 'fields' => array( 'checkbox' => array( 'name' => 'checkbox_name', 'type' => 'checkbox', 'label' => 'Some Checkbox', ), 'input_text' => array( 'name' => 'input_text_name', 'type' => 'input', 'label' => 'Some Input Text', ), 'input_number' => array( 'name' => 'input_number_name', 'type' => 'number', 'label' => 'Some Input Number', ), 'textarea' => array( 'name' => 'textarea_name', 'type' => 'textarea', 'label' => 'Some Textarea', ), 'image' => array( 'name' => 'image_name', 'type' => 'image', 'label' => 'Some Image', ), ), ), ), ); $spCC->create($args);
Кстати, я об этом уже писал.
4. Страницы настроек в админке.
Стандартный способ создание страниц настроек в админке сложный. Я опять все упростил.
$spAdminMainMenu = new SP_Framework_Admin_Meta_Box(); $args = array( 'type' => 'main', 'position' => 2, 'page_title' => 'Page Title', 'menu_title' => 'My Page', 'capability' => 'manage_options', 'menu_slug' => 'my_page', 'validate' => 'y', 'sanitize' => 'y', 'fields' => array( 'text' => array( 'type' => 'text', 'name' => 'text_name', 'label' => 'text', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), 'number' => array( 'type' => 'number', 'name' => 'number_name', 'label' => 'number', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), ), ); $spAdminMainMenu->create($args);
5. Виджеты
Если кому то инертно, то SP Framework может созвать виджеты. Но я ограничился двумя типами полей(текстовое и числовое).
class SP_Framework_Custom_Widget extends SP_Framework_Widget_ABS { function __construct(){ parent::__construct('widget_name', 'Some Widget', array('description' => 'Description of Widget')); add_action('widgets_init', array($this,'register')); } function register() { register_widget(get_class($this)); } function create($data){ $this->add_field( 'text', 'input text', 'Description', $this->default($data, 'sp_str'), 'sp_str' ); $this->add_field( 'number', 'input number', 'Description', $this->default($data, 'sp_num'), 'sp_num' ); } function get($args, $data){ $parameters = array(); foreach ($data as $key => $value) { $parameters[$key] = apply_filters('widget_text', $value); } echo $args['before_widget']; echo $parameters['sp_str']; echo $parameters['sp_num']; echo $args['after_widget']; } } $spAbsWC = new SP_Framework_Custom_Widget();
Тоже об этом писал.
6. Меню.
Бывали такие случаи когда frontend разраб сделает меню так, что хрен его прикрутишь к вордпресу. Поэтому, я добавил реализацию более простого способа работы с меню.
$menuID = 'top_menu'; $spTopMenu = SP_Framework_Menu::get($menuID); print_r($spTopMenu);
7. AJAX
Ajax классная штука, но вот пока ее реализуешь в WordPress можно запутаться. Я значительно упростил использование Ajax в SP Framework.
class SP_Framework_Some_Action extends SP_Framework_AJAX { function ajax_action() { //get $postID = sanitize_text_field($_POST['postID']); //some actions $result = ''; //return echo json_encode($result); wp_die(); } } $spSomeAction = new SP_Framework_Some_Action('sp_some_action');
8. Яндекс карты
Мне приходилось создавать проекты где была привязка элемента пост-тайпа к координатам. Я решил добавить эту возможность в SP Framework
Нужно только указать тип поля map.
$spMB = new SP_Framework_Post_Type_Meta_Box(); $args = array( 'post_type' => 'custom_post_type', 'name' => 'settings_name', 'label' => 'Some Settings', 'validate' => 'y', 'sanitize' => 'n', 'fields' => array( 'map_one' => array( 'type' => 'map', 'name' => 'map_one', 'label' => 'map1', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), 'map_two' => array( 'type' => 'map', 'name' => 'map_two', 'label' => 'map2', 'caption' => 'Caption text', 'required' => 'n', 'default' => '', ), ), ); $spMB->create($args);
И подключить яндекс api.
add_action('admin_enqueue_scripts', 'sp_yandex_api', 10); add_action('wp_footer', 'sp_yandex_api', 10); function sp_yandex_api(){ $yandexApiKey = ''; echo ''; }
9. Woocommerce
Частенько я делал интернет магазины. Решил расширить SP Framework и добавил тут да два класса для работы с Woocommerce.
Один для работы со стандартными возможностями.
$price = SP_Framework_Woocommerce::get_product_price($productID); ... $imgs = SP_Framework_Woocommerce::get_product_gallery($productID); ... SP_Framework_Woocommerce::add_to_cart($productID);
Другой для настройки страницы checkout.
$WC1 = new SP_Framework_Woocommerce_CF(); $args = array( 'action' => 'unset', 'fields' => array('billing_first_name', 'billing_last_name'), ); $WC1->init($args); $WC2 = new SP_Framework_Woocommerce_CF(); $args = array( 'action' => 'add', 'fields' => array( 'text' => array( 'name' => 'text_name', 'label' => 'text', 'type' => 'text', 'area' => 'billing', 'placeholder' => 'text', 'priority' => 10, 'required' => false, ), 'number' => array( 'name' => 'number_name', 'label' => 'number', 'type' => 'number', 'area' => 'billing', 'placeholder' => 'number', 'priority' => 20, 'required' => false, ), 'textarea' => array( 'name' => 'textarea_name', 'label' => 'textarea', 'type' => 'textarea', 'area' => 'shipping', 'placeholder' => 'textarea', 'priority' => 30, 'required' => false, ), 'checkbox' => array( 'name' => 'checkbox_name', 'label' => 'checkbox', 'type' => 'checkbox', 'area' => 'order', 'placeholder' => '', 'priority' => 40, 'required' => false, ), ), ); $WC2->init($args);
Подведу итог. SP Framework стал для меня полноценным инструментом для создания сайтов любой сложности на WordPress. И хотелось, что бы он помогал и упрощал жизнь другим WordPress разработчикам.
Комментариев (0)