@OneTwoThreeFourFive

Какой шаблон проектирования подходит для плагина WordPress?

Плагин добавляет виджеты в Elementor, настройки для продуктов в WooCommerce, использует разные хуки WooCommerce и других плагинов. Сейчас я просто создал общий класс и в этом классе подключаю файлы. Например для изменений в полях на странице оплаты я создал файл в плагине с названием Checkout.php и создал класс. То есть это вообще не OOP, а обычный функциональный код, просто в классе. Также плагин должен соединятся с другим сервером через API. Как это всё правильно организовать? Я читал про MVC. Это подходит здесь? Что будет моделью, просмотром, контроллером? Я понял что просмотр это файлы шаблоны с HTML разметкой, можно ли подключить файл или это должен быть метод в котором подключается файл, который надо вызывать в другом классе?
class Checkout {
	public function __construct() {
		add_filter( 'woocommerce_checkout_fields', array( $this, 'checkout_fields' ), 10, 1 );
		add_filter( 'woocommerce_checkout_fields', array( $this, 'checkout_remove_fields' ), 10, 1 );
	}

	public function checkout_fields( $fields ) {
	  $fields['billing']['billing_first_name']['placeholder'] = esc_html__( 'First Name*', 'textdomain' );
	  $fields['billing']['billing_first_name']['label'] = esc_html__( 'First Name', 'textdomain' );
	  $fields['billing']['billing_first_name']['priority'] = 5;

	  $fields['billing']['billing_last_name']['placeholder'] = esc_html__( 'Last Name*', 'textdomain' );
	  $fields['billing']['billing_last_name']['label'] = esc_html__( 'Last Name', 'textdomain' );
	  $fields['billing']['billing_last_name']['priority'] = 10;

	  $fields['billing']['billing_address_1']['placeholder'] = esc_html__( 'Address (optional)', 'textdomain' );
	  $fields['billing']['billing_address_1']['label'] = esc_html__( 'Address', 'textdomain' );
	  $fields['billing']['billing_address_1']['required'] = false;
	  $fields['billing']['billing_address_1']['priority'] = 15;

	  $fields['billing']['billing_email']['placeholder'] = esc_html__( 'Email Address*', 'textdomain' );
	  $fields['billing']['billing_email']['label'] = esc_html__( 'Email Address', 'textdomain' );
	  $fields['billing']['billing_email']['priority'] = 20;

    $fields['account']['account_password']['label'] = esc_html__( 'Password', 'textdomain' );
    $fields['account']['account_password']['placeholder'] = esc_html__( 'Password*', 'textdomain' );

	  return $fields;
	}

	public function checkout_remove_fields( $fields ) {
	  unset(
	    $fields['billing']['billing_address_2'],
	    $fields['billing']['billing_phone'],
	    $fields['billing']['billing_company'],
	    $fields['billing']['billing_city'],
	    $fields['billing']['billing_postcode'],
	    $fields['billing']['billing_state'],
	    $fields['billing']['billing_country']
	  );

	  return $fields;
	}
}
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
glaphire
@glaphire
PHP developer
Достаточно обычного рефакторинга на уровне "читаемо" и "без дублирования" (с размазыванием на пару классов по необходимости), MVC и паттерны это не ответ на такой вопрос (MVC - потому что это обобщенное понятие и просто притянуто к вебу из другой темы, а паттерн может вырисоваться сам во время рефакторинга, да и границы между некоторыми из них условны).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы