WordPress 테마 사 이 드 바 전환 기능 을 구현 하 는 PHP 스 크 립 트 상세 설명

주제 의 제작자 로 서 기능,전시 인터페이스 를 실현 하 는 동시에 주 제 를 유연 하고 변화 시 켜 더 많은 사람들의 다양한 수 요 를 만족 시 킬 책임 도 있다.
몇몇 친구 들 은 두 칸 테마(한쪽 사 이 드 바)를 선택 하 느 냐,세 칸 테마(양쪽 사 이 드 바)를 선택 하 느 냐 에 대해 고민 한 적 이 있 을 것 입 니 다.다음은 클래식 테 마 를 예 로 들 어 주제 에서 한쪽 사 이 드 바 와 양쪽 사 이 드 바 를 편리 하 게 전환 하 는 방법 에 대해 이야기 하 겠 습 니 다.마지막 으로 저 는 수 정 된 테 마 를 제공 하 겠 습 니 다.
20151214161808473.png (344×174)
관리 옵션 추가
백그라운드 처리
우선,function.php 를 수정 해 야 합 니 다.주요 처리 작업 은 이 파일 에 있 습 니 다.테마 에 이 파일 이 없 으 면 하 나 를 만 듭 시다.(function.php 설명 테마 가 없 으 면 Widget 을 지원 하지 않 습 니 다.좋 은 습관 이 아 닙 니 다.빨리 새로 만 듭 시다)
제 처 리 는 3 개의 큰 블록 을 포함 합 니 다.옵션 가 져 오기,초기 화,탭 작업 인터페이스 입 니 다.여기 에는 두 개의 옵션(게시판 과 게시판 내용 표시 여부)만 있 습 니 다.더 많은 옵션 을 추가 하려 면 코드 에 3 개의 TODO 위치 에 코드 를 추가 해 야 합 니 다.물론 옵션 이름 을 바 꿔 야 합 니 다.클래식 과 클래식 을 모두 바 꿔 라.

<?php
/**
 *      
 */
class ClassicOptions {
 
 /* --       -- */
 function getOptions() {
 //           
 $options = get_option('classic_options');
 //              ,           ,          
 if (!is_array($options)) {
  $options['notice'] = false;
  $options['notice_content'] = '';
  // TODO:          
  update_option('classic_options', $options);
 }
 //      
 return $options;
 }
 
 /* --     -- */
 function init() {
 //     POST     ,        ,        
 if(isset($_POST['classic_save'])) {
  //      ,             ,              
  $options = ClassicOptions::getOptions();
 
  //     
  if ($_POST['notice']) {
  $options['notice'] = (bool)true;
  } else {
  $options['notice'] = (bool)false;
  }
  $options['notice_content'] = stripslashes($_POST['notice_content']);
 
  // TODO:              
 
  //     
  update_option('classic_options', $options);
 
 //   ,        ,            
 } else {
  ClassicOptions::getOptions();
 }
 
 //     Design          ,   Current Theme Options
 add_theme_page("Current Theme Options", "Current Theme Options", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));
 }
 
 /* --     -- */
 function display() {
 $options = ClassicOptions::getOptions();
?>
 
<form action="#" method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">
 <div class="wrap">
 <h2><?php _e('Current Theme Options', 'classic'); ?></h2>
 
 <!--     -->
 <table class="form-table">
  <tbody>
  <tr valign="top">
   <th scope="row">
   <?php _e('Notice', 'classic'); ?>
   <br/>
   <small style="font-weight:normal;"><?php _e('HTML enabled', 'classic') ?></small>
   </th>
   <td>
   <!--         -->
   <label>
    <input name="notice" type="checkbox" value="checkbox" <?php if($options['notice']) echo "checked='checked'"; ?> />
    <?php _e('Show notice.', 'classic'); ?>
   </label>
   <br/>
   <!--       -->
   <label>
    <textarea name="notice_content" cols="50" rows="10" id="notice_content" style="width:98%;font-size:12px;" class="code"><?php echo($options['notice_content']); ?></textarea>
   </label>
   </td>
  </tr>
  </tbody>
 </table>
 
 <!-- TODO:             -->
 
 <!--      -->
 <p class="submit">
  <input type="submit" name="classic_save" value="<?php _e('Update Options &raquo;', 'classic'); ?>" />
 </p>
 </div>
 
</form>
 
<?php
 }
}
 
/**
 *        
 */
add_action('admin_menu', array('ClassicOptions', 'init'));
 
?>
프런트 프로 세 싱
게시판 을 홈 페이지 에 표시 하려 면 index.php 를 수정 해 야 합 니 다.이것 은 비교적 간단 합 니 다.단지 일부 판단 문 구 를 통 해 물건 을 표시 할 지 말 지 를 결정 할 뿐 입 니 다.물론 다른 작업 을 할 수 있 습 니 다.관건 은 옵션 의 값 을 얻 고 처리 하 는 것 입 니 다.
사실은 두 단계 로 나 눌 수 있다.
옵션 가 져 오기(PHP 파일 마다 한 번 만 가 져 오 면 됩 니 다.파일 맨 위 에서 실행 할 수 있 습 니 다)
옵션 을 처리 합 니 다(여기 서 판단 이 성립 되면 공고 내용 을 표시 합 니 다)

<!--      -->
<?php $options = get_option('classic_options'); ?>
 
<!--            ,         ,       -->
<?php if($options['notice'] && $options['notice_content']) : ?>
 <div id="notice">
 <div class="content"><?php echo($options['notice_content']); ?></div>
 </div>
<?php endif; ?>
관리 항목 을 사용 하여 사 이 드 바 의 수량 을 제어 할 수 있 습 니 다.테마 파일 에서 사 이 드 바 의 수량 을 가 져 오고 서로 다른 수량 에 대해 서로 다른 처 리 를 하여 서로 다른 수량의 사 이 드 바 사 이 를 전환 하 는 목적 을 달성 할 수 있 습 니 다.

//      ,        
$options['sidebar'] = 1;
//         
$options['sidebar'] = $_POST['sidebar'];
<select name="sidebar" size="1">
 <!--      -->
 <option value="1" <?php if($options['sidebar'] != 2) echo ' selected '; ?>><?php _e('Single', 'classic'); ?></option>
 <!--      -->
 <option value="2" <?php if($options['sidebar'] == 2) echo ' selected '; ?>><?php _e('Double', 'classic'); ?></option>
</select>
 <?php _e('sidebar(s)', 'classic'); ?>.

Widget 지원 추가
한쪽 사 이 드 바 와 양쪽 사 이 드 바 에서 전환 하려 면 서로 다른 두 가지 모드 에 대해 Widget 초기 화 된 두 가 지 를 정의 해 야 합 니 다.
코드 에서 위 젯 정 보 를 정확하게 얻 기 위해 서 는 사 이 드 바 라 도 별명 을 지어 야 합 니 다.코드 에 있 는 Sidebar 와 같 습 니 다.single.사 이 드 바 개수 가 1 일 때 Sidebar 등록single.사 이 드 바 개수 가 2 일 때 Sidebar 등록top 과 Sidebarbottom.

// Widgets
$options = get_option('classic_options');
 
//     
if(function_exists('register_sidebar') && $options['sidebar'] == 1) {
 register_sidebar(array(
 'name' => 'Sidebar_single',
 'before_widget' => '<li id="%1$s" class="widget %2$s">',
 'after_widget' => '</li>',
 'before_title' => '<h3>',
 'after_title' => '</h3>'
 ));
 
//     
} else if(function_exists('register_sidebar') && $options['sidebar'] == 2) {
 register_sidebar(array(
  'name' => 'Sidebar_bottom',
  'before_widget' => '<li id="%1$s" class="widget %2$s">',
  'after_widget' => '</li>',
  'before_title' => '<h3>',
  'after_title' => '</h3>'
 ));
 register_sidebar(array(
  'name' => 'Sidebar_top',
  'before_widget' => '<li id="%1$s" class="widget %2$s">',
  'after_widget' => '</li>',
  'before_title' => '<h3>',
  'after_title' => '</h3>'
 ));
}
사 이 드 바 구조 수정
우선,우 리 는 지금 양쪽 사 이 드 바 구조 가 필요 합 니 다.어떻게 양쪽 사 이 드 바 를 한쪽 사 이 드 바 로 바 꿉 니까?앞의 사 이 드 바 의 끝 탭 과 뒤의 사 이 드 바 의 시작 탭 을 삭제 하면 두 사 이 드 바 는 하나의 사 이 드 바 로 합 쳐 집 니 다.단순 한 문 자 는 제 생각 과 표현 을 하기 어렵 습 니 다.다음 코드 와 예제 그림 을 계속 볼 수 있 습 니 다.

<ul class="sidebar_1">
 <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_single') ) : // single ?>
 
 <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_top') ) : // top ?>
<!-- TODO:         -->
 <?php endif; // top ?>
 
 <?php if ($options['sidebar'] >= 2) : ?>
</ul>
<ul class="sidebar_2">
 <?php endif; ?>
 
 <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_bottom') ) : // bottom ?>
<!-- TODO:         -->
 <?php endif; // bottom ?>
 
 <?php endif; // single ?>
</ul>
OK,이것 이 바로 사 이 드 바 코드 구조 입 니 다.한쪽 사 이 드 바 간 의 전환 을 완벽 하 게 실현 할 수 있 습 니 다.그런데 어떻게 작 동 합 니까?나 는 뒤에 그림 으로 그것 이 나타 날 수 있 는 6 가지 상 태 를 표시 할 것 이다.
테마 가 Widget 을 지원 하기 때문에 코드 에 functionexists('dynamic_sidebar')===true,그러면!function_exists('dynamic_sidebar') === false.
Widget 지원 을 추가 할 때 쓴 코드 를 기억 하 십 니까?사 이 드 바 1 시 sidebarsingle 유효,사 이 드 바 2 시,sidebartop 과 sidebarbottom 효과 가 있 습 니 다.이것 은 전체 사 고 를 관통 하 는 관건 입 니 다.
비고:
  • 빨간색:선택 코드 의 값 은 false 이 고
  • 을 통과 하지 않 음 을 표시 합 니 다.
  • 녹색:선택 코드 의 값 이 true 임 을 나타 내 며
  • 을 통 해
  • 파란색:선택 부분 에서 선택 한 widgets 가
  • 을 대체 할 것 임 을 나타 낸다.
  • 회색:일부 코드 를 선택 하면 실 효 됩 니 다
  • 상태 1:한쪽 사 이 드 바,Widget 사용 안 함
    20151214162043469.png (600×223)
    상태 2:양쪽 사 이 드 바,Widget 사용 안 함
    20151214162105747.png (600×223)
    상태 3:한쪽 사 이 드 바,Widget 사용
    20151214162131301.png (600×223)
    상태 4:양쪽 사 이 드 바,상단 사 이 드 바 위 젯 사용
    20151214162152461.png (600×223)
    상태 5:양쪽 사 이 드 바,아래쪽 사 이 드 바 위 젯 사용
    20151214162214329.png (600×223)
    상태 6:양쪽 사 이 드 바,상단 과 아래쪽 사 이 드 바 모두 Widget 사용
    20151214162230870.png (600×223)

    좋은 웹페이지 즐겨찾기