테마 사용자 정의 도구: 조건부, 하위 테마 및 플러그인
- <스팬>1. WordPress 테마 사용자 정의 프로그램 소개
- <스팬>2. WordPress 테마 사용자 정의 프로그램과 상호 작용
- <스팬>3. WordPress 테마 사용자 정의 상용구
- <스팬>4. WordPress 테마 사용자 정의 프로그램 상용구 확장
- 5. 현재 읽고 있는 내용: 테마 맞춤설정 도구: 조건부, 하위 테마 및 플러그인
지금까지 Theme Customizer Boilerplate와 해당 후크를 사용하여 테마 옵션을 처리하는 것이 얼마나 간단한지 살펴보았습니다. 아마 기억하시겠지만, 가장 중요한 단계는 'thsp_cbp_options_array' 필터 후크에 연결하고 테마에 사용하려는 옵션 배열을 전달하는 것이었습니다.
여러분은 이미 WordPress 작업 및 필터 후크(플러그인 API)와 그 작동 방식에 대해 잘 알고 계실 것입니다. 하지만 혹시 모르니 필터 후크를 예로 들어 간단히 요약해 보겠습니다. add_filter 함수를 사용하여 사용자 정의 함수를 정의하고 기존 필터에 연결할 수 있습니다.
add_filter( $tag, $function_to_add, $priority, $accepted_args );
우선순위 주장에 집중해 보겠습니다. 기본값은 10이므로 다른 숫자를 사용하지 않으면 함수의 실행 우선순위가 됩니다. 숫자를 낮추면 기능이 더 일찍 실행됩니다. 따라서 다음과 같이 하면:
// Adding first message
function my_theme_add_first_message( $content ) {
$content .= '<p>First Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_first_message', 1 );
// Adding second message
function my_theme_add_second_message( $content ) {
$content .= '<p>Second Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_second_message', 2 );
Single.php에서 the_content 함수를 호출하거나 다른 템플릿 게시물 내용이 표시되고 그 뒤에 첫 번째 메시지, 두 번째 메시지가 표시됩니다. 이 코드 조각의 순서 때문이 아니라 실행 우선순위 매개변수 때문입니다. 갈고리를 언덕 아래로 굴러 내려가는 도중에 온갖 물건을 집어내는 눈덩이처럼 생각해보세요.
이것이 Theme Customizer Boilerplate에 어떻게 적용됩니까?
우선순위 값이 1로 설정된 사용자 정의 함수(예: my_theme_options_array)를 사용하여 테마의 function.php 파일에서 'thsp_cbp_options_array'에 연결할 수 있습니다. 이는 'thsp_cbp_options_array에 연결되는 다른 함수를 의미합니다. ' 필터 후크는 이미 정의한 my_theme_options_array 함수 이후에 이를 수행합니다. 이 예를 살펴보십시오.
function my_theme_options_array() {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
$options = array(
// Section ID
'my_theme_new_section' => array(
'existing_section' => false,
'args' => array(
'title' => __( 'New Section', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Radio field
*/
'my_radio_button' => array(
'setting_args' => array(
'default' => 'option-2',
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Radio Button', 'my_theme_textdomain' ),
'type' => 'radio', // Radio control
'choices' => array(
'option-1' => array(
'label' => __( 'Option 1', 'my_theme_textdomain' )
),
'option-2' => array(
'label' => __( 'Option 2', 'my_theme_textdomain' )
),
'option-3' => array(
'label' => __( 'Option 3', 'my_theme_textdomain' )
)
),
'priority' => 3
)
)
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );
이렇게 하면 내 라디오 버튼이라는 하나의 필드가 있는 테마 사용자 정의 프로그램에 새 섹션이 추가됩니다. 그런 다음 귀하 또는 다른 누군가가 귀하의 테마에 대한 하위 테마를 개발하고 새 섹션을 유지하기로 결정했지만 내 라디오 버튼 대신 내 체크박스를 사용하는 것이 더 나을 수 있습니다. 쉬운:
function my_child_theme_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* This time, we're only editing fields in my_theme_new_section in the $options array
*/
$options['my_theme_new_section']['fields'] = array(
'my_checkbox_field' => array(
'setting_args' => array(
'default' => true,
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Checkbox', 'my_theme_textdomain' ),
'type' => 'checkbox', // Checkbox field control
'priority' => 2
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );
$options 매개변수를 my_theme_options_array에 전달하지 않고 my_child_theme_options_array 함수에 전달한 것을 발견하셨나요? 그 이유는 'thsp_cbp_options_array' 후크에 처음 연결했을 때 Theme Customizer Boilerplate 샘플 옵션을 재정의하고 싶었기 때문입니다. 그런 다음 하위 테마에서 다시 연결했을 때 상위 테마의 옵션을 완전히 삭제하지 않고 약간만 편집하고 싶었습니다. 그렇기 때문에 전체 $options 배열이 아닌 $options['my_theme_new_section']['fields']만 다루려고 합니다.
물론 상위 테마에서 'thsp_cbp_options_array' 필터 후크에 두 번 이상 연결할 수도 있습니다. 테마에 플러그인 영역 기능을 추가하지 않고 플러그인이 원하는 대로 수행하도록 선택했다고 가정해 보겠습니다. 그럴거야. 이제 특정 플러그인이 활성화된 경우에만 일부 테마 사용자 정의 옵션을 표시하려고 합니다. 다시 말하지만, 쉽습니다:
function my_plugin_dependency_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* Only adding my_plugin_dependency_section if 'test-plugin.php' is active
*/
if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
$options['my_plugin_dependency_section'] = array(
'existing_section' => false,
'args' => array(
'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Text field
*/
// Field ID
'new_text_field' => array(
'setting_args' => array(
'default' => __( '', 'my_theme_textdomain' ),
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'Only shows if', 'my_theme_textdomain' ),
'type' => 'text', // Text field control
'priority' => 5
)
),
)
);
}
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );
테마와 함께 사용할 핵심 기능 플러그인을 개발하고 싶으신가요? 테마의 function.php 파일에서와 마찬가지로 플러그인 파일 중 하나에서도 'thsp_cbp_options_array'에 연결할 수 있습니다.
옵션에 미쳐 가지 마세요
개발하는 테마에 옵션을 추가할 때마다 WordPress의 핵심 원칙 중 하나인 옵션이 아닌 결정을 염두에 두어야 합니다. 테마에 있는 모든 사소한 세부 사항에 대해 관심을 갖고 사용자 옵션을 추가하기 시작하는 것은 쉽지만 이는 누구에게도 도움이 되지 않습니다. 특히 플러그인 종속 옵션을 추가하는 이러한 몇 가지 요령이 테마의 옵션 수를 가능한 한 낮게 유지하는 데 도움이 되기를 바랍니다.
결국, 테마에 모든 단일 요소의 모든 테두리 반경과 같은 옵션이 있는 경우 WYSIWYG 편집기인 테마가 아니며 아마도 훌륭한 편집기는 아닐 것입니다.
흰 셔츠를 사는 것은 좀 더 노력하면 식탁보로 바꿀 수 있기 때문이 아니라, “흰 셔츠 느낌”이 마음에 들기 때문에 사는 것입니다. WordPress 테마도 그와 같아야 하며, 상상할 수 있는 모든 방식으로 모든 것을 시도하지 않고 특정 방식으로 콘텐츠를 제시해야 합니다. 당신이 테마 개발자라면 사용자의 기대치가 올바른지 확인하는 것이 당신의 임무입니다.