Публикация в группе: Полезное для WordPress

Категории группы: Полезное

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

Документация

Видео документация

5

Автор публикации

не в сети 7 месяцев

spoot@bk.ru

85
Комментарии: 54Публикации: 23Регистрация: 09-03-2016Продаж/Покупок: 0/0