Maison développement back-end tutoriel php 实现WordPress主题侧边栏切换功能的PHP脚本详解_PHP

实现WordPress主题侧边栏切换功能的PHP脚本详解_PHP

May 28, 2016 pm 01:13 PM
php wordpress 主题 侧边栏

作为主题的制作者, 除了实现功能, 展示界面, 还有责任使主题灵活多变, 以满足更多人不同的需求.
可能一些朋友曾为选用双栏主题 (单侧边栏) 还是三栏主题 (双侧边栏) 而烦恼过. 下面我们以 Classic 主题为例, 谈谈如何在主题中方便地切换单侧边栏和双侧边栏. 最后我会提供修改后的主题.

20151214161808473.png (344×174)

添加管理选项
后台处理
首先, 我们要修改 function.php, 主要的处理工作都在这个文件里面, 如果主题没有这个文件, 就创建一个吧. (没有 function.php 说明主题不支持 Widget, 可不是一个好习惯哦, 还是赶紧新建一个吧)
我的处理包括 3 大块: 获取选项, 初始化, 标签页操作界面. 这里只创建一个公告栏, 包括两个选项 (是否显示公告栏和公告栏内容). 如果要添加更多选项, 也只需要代码中 3 个 TODO 的位置上追加一些代码而已. 当然, 你还需要改一下选项名称, 将 Classic 和 classic 全部之换掉.

<&#63;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();
&#63;>
 
<form action="#" method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">
 <div class="wrap">
 <h2><&#63;php _e('Current Theme Options', 'classic'); &#63;></h2>
 
 <!-- 公告栏 -->
 <table class="form-table">
  <tbody>
  <tr valign="top">
   <th scope="row">
   <&#63;php _e('Notice', 'classic'); &#63;>
   <br/>
   <small style="font-weight:normal;"><&#63;php _e('HTML enabled', 'classic') &#63;></small>
   </th>
   <td>
   <!-- 是否显示公告栏 -->
   <label>
    <input name="notice" type="checkbox" value="checkbox" <&#63;php if($options['notice']) echo "checked='checked'"; &#63;> />
    <&#63;php _e('Show notice.', 'classic'); &#63;>
   </label>
   <br/>
   <!-- 公告栏内容 -->
   <label>
    <textarea name="notice_content" cols="50" rows="10" id="notice_content" style="width:98%;font-size:12px;" class="code"><&#63;php echo($options['notice_content']); &#63;></textarea>
   </label>
   </td>
  </tr>
  </tbody>
 </table>
 
 <!-- TODO: 在这里追加其他选项内容 -->
 
 <!-- 提交按钮 -->
 <p class="submit">
  <input type="submit" name="classic_save" value="<&#63;php _e('Update Options &raquo;', 'classic'); &#63;>" />
 </p>
 </div>
 
</form>
 
<&#63;php
 }
}
 
/**
 * 登记初始化方法
 */
add_action('admin_menu', array('ClassicOptions', 'init'));
 
&#63;>
Copier après la connexion

前台处理

要公告栏在首页上显示, 需要修改一下 index.php, 这个比较简单, 只是通过一些判断语句决定东西要不要显示出来而已. 当然, 你可以进行其他操作, 关键是获取到选项的值, 并对它们进行处理.
其实可以分为两步:

获取选项 (对每个 PHP 文件, 获取一次就行了, 可以在文件顶部执行)
对选项进行处理 (这里判断成立的话就将公告内容显示出来)

<!-- 获取选项 -->
<&#63;php $options = get_option('classic_options'); &#63;>
 
<!-- 如果用户选择显示公告栏, 并且公告栏有内容, 则显示出来 -->
<&#63;php if($options['notice'] && $options['notice_content']) : &#63;>
 <div id="notice">
 <div class="content"><&#63;php echo($options['notice_content']); &#63;></div>
 </div>
<&#63;php endif; &#63;>
Copier après la connexion

可以使用管理项来控制侧边栏的数量, 在主题文件中获取侧边栏的数量, 对不同的数量作出不同的处理, 以达到在不同数量侧边栏之间切换的目的.

// 侧边栏数量, 默认为单侧边栏
$options['sidebar'] = 1;
// 获得最新提交的值
$options['sidebar'] = $_POST['sidebar'];
<select name="sidebar" size="1">
 <!-- 单侧边栏 -->
 <option value="1" <&#63;php if($options['sidebar'] != 2) echo ' selected '; &#63;>><&#63;php _e('Single', 'classic'); &#63;></option>
 <!-- 双侧边栏 -->
 <option value="2" <&#63;php if($options['sidebar'] == 2) echo ' selected '; &#63;>><&#63;php _e('Double', 'classic'); &#63;></option>
</select>
 <&#63;php _e('sidebar(s)', 'classic'); &#63;>.

Copier après la connexion

添加 Widget 支持

因为要在单侧边栏和双侧边栏中切换, 所以我们需要对不同的两种模式定义两个 Widget 初始化的分支.
这里比较特殊, 为了在代码中正确获取 Widget 信息, 就算是单侧边栏也需要起一个别名. 就像代码中的 Sidebar_single. 当侧边栏个数为 1 时, 登记 Sidebar_single. 当侧边栏个数为 2 时, 登记 Sidebar_top 和 Sidebar_bottom.

// 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>'
 ));
}
Copier après la connexion

修改侧边栏结构

首先要明确, 我们现在需要双侧边栏结构. 怎样将双侧边栏变为单侧边栏呢? 只要将前一个侧边栏的结束标签和后一个侧边栏的开始标签删除, 两个侧边栏就合并为一个侧边栏了. 单纯的文字很难将我的想法和实现表达出来, 你可以接着看下面的代码和示例图片.

<ul class="sidebar_1">
 <&#63;php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_single') ) : // single &#63;>
 
 <&#63;php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_top') ) : // top &#63;>
<!-- TODO: 顶部侧边栏内容 -->
 <&#63;php endif; // top &#63;>
 
 <&#63;php if ($options['sidebar'] >= 2) : &#63;>
</ul>
<ul class="sidebar_2">
 <&#63;php endif; &#63;>
 
 <&#63;php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar_bottom') ) : // bottom &#63;>
<!-- TODO: 底部侧边栏内容 -->
 <&#63;php endif; // bottom &#63;>
 
 <&#63;php endif; // single &#63;>
</ul>
Copier après la connexion

OK, 这就是侧边栏代码结构了. 它可以完美得实现单双侧边栏间的切换. 但它是怎么工作的呢? 我将在后面用图片列出它的 6 种可能出现的状态.
因为主题已经支持 Widget 了, 所以代码中 function_exists('dynamic_sidebar') === true, 则 !function_exists('dynamic_sidebar') === false.
记得添加 Widget 支持时写的代码吗? 侧边栏为 1 时 sidebar_single 有效, 侧边栏为 2 时, sidebar_top 和 sidebar_bottom 有效. 这是贯穿整个思路的关键.

备注:

  • 红色: 表示选中代码的值是 false, 不通过
  • 绿色: 表示选中代码的值是 true, 通过
  • 蓝色: 表示选中部分将被选用的 widgets 所取代
  • 灰色: 表示选中部分代码将会失效

状态一: 单侧边栏, 没使用 Widget

20151214162043469.png (600×223)

状态二:双侧边栏, 没使用 Widget

20151214162105747.png (600×223)

状态三: 单侧边栏, 使用 Widget

20151214162131301.png (600×223)

状态四: 双侧边栏, 顶部侧边栏使用 Widget

20151214162152461.png (600×223)

状态五: 双侧边栏, 底部侧边栏使用 Widget

20151214162214329.png (600×223)

状态六: 双侧边栏, 顶部和底部侧边栏都使用 Widget

20151214162230870.png (600×223)

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajuster la liste d'articles WordPress Comment ajuster la liste d'articles WordPress Apr 20, 2025 am 10:48 AM

Il existe quatre façons d'ajuster la liste des articles WordPress: utilisez des options de thème, utilisez des plugins (tels que l'ordre des types de publication, la liste des publiques WP, des trucs boxy), utilisez du code (ajoutez des paramètres dans le fichier functions.php), ou modifiez directement la base de données WordPress.

Comment afficher les commentaires WordPress Comment afficher les commentaires WordPress Apr 20, 2025 pm 12:06 PM

Activer les commentaires dans le site Web de WordPress: 1. Connectez-vous au panneau d'administration, accédez à "Paramètres" - "Discussions" et vérifiez "Autoriser les commentaires"; 2. Sélectionnez un emplacement pour afficher les commentaires; 3. Personnaliser les commentaires; 4. Gérer les commentaires, approuver, rejeter ou supprimer; 5. Utiliser & lt ;? php commentaires_template (); ? & gt; Tags pour afficher les commentaires; 6. Activer les commentaires imbriqués; 7. Ajuster la forme du commentaire; 8. Utilisez des plugins et des codes de vérification pour empêcher les commentaires du spam; 9. Encouragez les utilisateurs à utiliser Gravatar Avatar; 10. Créer des commentaires pour se référer à

Connexion du compte du site Web WordPress Connexion du compte du site Web WordPress Apr 20, 2025 am 09:06 AM

Pour vous connecter à un compte de site Web WordPress: Visitez la page de connexion: entrez l'URL du site Web plus "/wp-login.php". Entrez votre nom d'utilisateur et votre mot de passe. Cliquez sur "Connexion". Vérification Vérification en deux étapes (facultative). Après avoir réussi à vous connecter, vous verrez le tableau de bord du site Web.

Que faire s'il y a une erreur dans WordPress Que faire s'il y a une erreur dans WordPress Apr 20, 2025 am 11:57 AM

Guide de résolution d'erreur WordPress: 500 Erreur du serveur interne: désactivez le plug-in ou vérifiez le journal d'erreur du serveur. 404 Page introuvable: Vérifiez le permalien et assurez-vous que le lien de la page est correct. Écran blanc de la mort: augmentez la limite de mémoire PHP du serveur. Erreur de connexion de la base de données: vérifiez l'état du serveur de base de données et la configuration WordPress. Autres conseils: activer le mode de débogage, vérifier les journaux d'erreur et rechercher le support. Empêcher les erreurs: mettre à jour régulièrement WordPress, installer uniquement les plugins nécessaires, sauvegarder régulièrement votre site Web et optimiser les performances du site Web.

Plug-in Enregistrement du produit recommandé pour WordPress facile à utiliser Plug-in Enregistrement du produit recommandé pour WordPress facile à utiliser Apr 20, 2025 am 08:15 AM

Il n'y a pas de plugin d'enregistrement de produit WordPress parfait, le choix doit être basé sur les besoins réels et la taille du site Web. Les plug-ins recommandés incluent: MemberPress: Configuration complexe puissante mais à prix élevé, restreindre le contenu Pro: Focus sur les restrictions de contenu et la gestion des membres, les téléchargements numériques faciles à efficacité: vendre des produits numériques et les utilisateurs s'inscrivent en fonctions supplémentaires

Comment écrire une en-tête d'un wordpress Comment écrire une en-tête d'un wordpress Apr 20, 2025 pm 12:09 PM

Les étapes pour créer un en-tête personnalisé dans WordPress sont les suivantes: modifier le fichier de thème "header.php". Ajoutez le nom et la description de votre site Web. Créez un menu de navigation. Ajoutez une barre de recherche. Enregistrez les modifications et affichez votre en-tête personnalisé.

Création du site Web WordPress et éviter les fosses Création du site Web WordPress et éviter les fosses Apr 20, 2025 am 08:06 AM

Soyez prudent lors de la création d'un site Web WordPress. Le guide pour percer les fosses vous aide à éviter les risques: choisissez des thèmes payants et évitez les risques de qualité et de sécurité des thèmes gratuits. "Moins c'est plus" lors de l'installation des plugins pour éviter les problèmes de vitesse et de compatibilité du site Web. Optimisez régulièrement la base de données pour assurer un fonctionnement en douceur du site Web. Faites attention aux mesures de sécurité et mettez régulièrement à mettre à jour et à installer des plug-ins de sécurité. Modifiez soigneusement le code pour éviter les plantages de sites Web et le faire dans un environnement de test si nécessaire. Faites attention à l'optimisation des performances, améliorez la vitesse du site Web et améliorez l'expérience utilisateur.

Quels sont les plugins pour WordPress bloquant IP Quels sont les plugins pour WordPress bloquant IP Apr 20, 2025 am 08:27 AM

La sélection des plugins de blocage IP WordPress est cruciale. Les types suivants peuvent être pris en compte: basé sur .htaccess: fonctionnement efficace mais complexe; Fonctionnement de la base de données: flexible, mais faible efficacité; pare-feu: performances de haute sécurité, mais configuration complexe; Autécrit: le plus haut contrôle, mais nécessite un niveau plus technique.

See all articles