Всем привет! Хочу поделится своей наработкой для 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)