@vlad_godunov
Пришел в этот мир не просто так. Наверное...

Как убрать дублирование кода carbon fields?

Имеется 2 контейнера с одинаковой вкладкой по содержимому. Как мне эти поля вынести в отдельный блок, чтобы не редактировать в 2х местах?

Container::make( 'post_meta', 'Настройки статьи' )
	         ->add_tab( __( 'SEO' ), array(
		         Field::make( 'text', 'crb_seo_title', 'Заголовок' ),
		         Field::make( 'textarea', 'crb_seo_description', 'Описание' ),
		         Field::make( 'text', 'crb_seo_keywords', 'Ключевые слова' ),
		         Field::make( 'radio', 'crb_seo_robots', 'Видимость' )
		              ->add_options( array(
			              'index, follow'     => 'index, follow',
			              'noindex, nofollow' => 'noindex, nofollow',
		              ) )
	         ) );

И

Container::make( 'term_meta', __( 'Category Properties' ) )
	         ->add_tab( __( 'SEO' ), array(
		         Field::make( 'text', 'crb_seo_title', 'Заголовок' ),
		         Field::make( 'textarea', 'crb_seo_description', 'Описание' ),
		         Field::make( 'text', 'crb_seo_keywords', 'Ключевые слова' ),
		         Field::make( 'radio', 'crb_seo_robots', 'Видимость' )
		              ->add_options( array(
			              'index, follow'     => 'index, follow',
			              'noindex, nofollow' => 'noindex, nofollow',
		              ) )
	         ) );
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Вы можете создать поля простым циклом с помощью обычного массива ключ => значение

$crb_options = array(
	'post_meta' => __( 'Article Properties', 'textdomain' ),
	'term_meta' => __( 'Category Properties', 'textdomain' ),	
);

foreach ( $crb_options as $key => $crb_option ) {
	Container::make( $key, $crb_option )
		->add_tab( 'SEO', array(
			Field::make( 'text', 'crb_seo_title', __( 'Title', 'textdomain' ) ),
			Field::make( 'textarea', 'crb_seo_description', __( 'Description', 'textdomain' ) ),
			Field::make( 'text', 'crb_seo_keywords', __( 'Keywords', 'textdomain' ) ),
			Field::make( 'radio', 'crb_seo_robots', __( 'Robots Visibility', 'textdomain' ) )
			->add_options( array(
				'index, follow'     => 'index, follow',
				'noindex, nofollow' => 'noindex, nofollow',
			) )
		) );
}


Строку 'SEO' переводить не обязательно, а вот русскоязычные строки лучше в строки перевода обернуть. И очень желательно указать textdomain вашей темы, который указывается при регистрации и подключении файла перевода с помощью функции load_theme_textdomain()

keywords не используются и никак не влияют на SEO уже более 10 лет

В каталоге полно плагинов для SEO, будет работать лучше, чем самодеятельность

noindex, nofollow задаются с помощью функции и фильтра wp_robots
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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