web-dev-qa-db-fra.com

Avoir un contenu différent dans la barre latérale pour de nombreuses pages?

Je continue sur un sujet que j’avais déjà posté mais sous un angle différent. S'il vous plaît nu avec moi que j'essaie de fournir autant d'informations que possible.

Je cherche à ajouter un simple zone de texte appelé "Quick Facts" à un groupe d’animaux/cryptid pages dans une partie de mon site. Cela fournira une liste de faits et de chiffres pour chaque animal.

Voici les étapes que j'ai suivies pour mettre cela en place:

  • Création des barres latérales gauche et droite dans functions.php, appelées cryptid-sidebar-widgets-left (pour la barre latérale gauche) et cryptid-sidebar-widgets (pour la barre latérale droite). La barre latérale gauche est l'endroit où la zone "Faits rapides" va aller.
  • Création d'un nouveau modèle de page appelé cryptofact-page.php. Il récupère un en-tête personnalisé ainsi que les deux nouvelles barres latérales.
  • Création de pages dans wordpress avec chaque animal.
  • Déposez un widget de texte dans la barre latérale gauche et commencez à rédiger des faits rapides.

Cela finit par ressembler à ceci:

enter image description here

Le problème est que, bien entendu, cette barre latérale répète les mêmes données texte pour toutes les pages. J'en ai besoin pour afficher des données uniques pour la page de chaque animal.

Je me demande comment aborder au mieux ce problème car je vais avoir plus de 100+ de ces pages de faits sur les animaux. Voici les options que j'ai rassemblées et les problèmes que chacune pose. Je suis un nouveau développeur Web, alors je veux savoir comment un site professionnel traiterait ce problème.

  1. Enregistrez des barres latérales et créez-les -___. Php pour chaque nouvelle page: Je peux retourner dans functions.php et continuer à enregistrer plus de 100 barres latérales différentes pour chaque créature. À partir de là, je peux créer des pages php individuelles appelées sidebar-creaturename.php et les appeler à partir du même modèle à l'aide de champs personnalisés.

    • Dans un tutoriel que j'ai lu, je peux placer les informations suivantes dans mon modèle cryptofact-page.php. Ensuite, accédez au champ personnalisé dans mes pages et ajoutez Key: sidebar et Value: (nom de la sidebar -___. Php) que j'ai créé pour cet animal. Cela me permet de conserver le même modèle pour toutes les pages, mais les appels dans une barre latérale différente pour chacune.

    <?php $sidebar = get_post_meta($post->ID, "sidebar", true); get_sidebar($sidebar); ?>

L'utilisateur Will, de mon dernier sujet, m'a parlé de l'insertion de ce code dans mon modèle de page ou dans une barre latérale que je créerais. Et m'a présenté à l'idée de champs personnalisés.

    <?php
        var $meta = get_post_meta($post->id, "your-key", true);

        if(!empty($meta)): 
    ?>
        <aside>
            <?php echo $meta; ?>
        </aside>

    <?php endif; ?>

Le problème était ... J'ai ajouté ceci et ça a déchiré ma page. Je ne savais donc pas si je l'avais ajouté au mauvais endroit ou s'il me manquait quelque chose. Si quelqu'un peut en dire plus à ce sujet, ce serait apprécié. Je vais ajouter du code à la fin de cet article qui montre mon modèle cryptofact-page.php et la barre latérale potentielle que je vais utiliser.

  1. Utilisation du plugin Widget Logic (ou d'un plugin similaire): Je n'aime pas trop utiliser un plugin alors que je peux le faire en codant mes propres fichiers. C’est une suggestion que j’ai trouvée lors de la recherche de mon problème. En bref, ce plugin ajoute un champ supplémentaire à chaque autre widget qui peut spécifier quelle page afficher ce widget particulier.

    • J'ajoute le widget texte à la barre latérale (cryptid-sidebar-widgets-left) que j'ai ajoutée au modèle cryptofacts-page.php. Sous la zone du widget texte, vous pouvez utiliser la logique du widget pour ajouter is_page ('pageid') et noter l'ID de la page pour la page de cet animal.
    • Je répète ce processus encore et encore, maintenant que lorsque j'ouvre la zone Widgets sous le personnalisateur, il y a maintenant plus de 100 Widgets de texte que je dois parcourir pour cette barre latérale. Bien que cela soit facile à exécuter, cela ressemble aussi un peu à un cluster-f. Je veux que le titre du widget texte ne contienne que "Quick Facts", mais cela voudrait dire que j'aurais beaucoup de widgets texte nommés Quick Facts sans aucun moyen de faire la différence en un coup d'œil (comme si je devais revenir en arrière). ajoutez ou modifiez des faits, je devrai les ouvrir tous manuellement et trouver la créature que je veux).
  2. Se débarrasser complètement de la barre latérale gauche. J'y ai pensé et je suppose que je pourrais me débarrasser complètement de la barre latérale gauche et pendant que j'écris la page de chaque animal dans Wordpress, je peux ajouter un quickfact div que flotte à la gauche du contenu principal div de l'animal . C’était là ma première idée lorsque j’ai pensé à ces pages sur Animal Factoid, mais lorsque j’ai étudié différents tutoriels sur l’ajout de colonnes, beaucoup ont suggéré d’ajouter une barre latérale gauche. Cela signifierait que je n'ai pas à traiter avec des widgets ou des barres latérales et que tous les "faits en bref" vont dans la même zone de saisie que le reste du contenu. Cela signifie simplement que vous aurez à traiter avec beaucoup plus de divs (ce qui n’est pas un problème car j’en ai beaucoup dans la barre latérale).

Encore une fois, je me demande quel serait le moyen le plus efficace de le faire pour plus de 100 pages d'animaux individuels? Quelle est la pratique la plus courante pour s’y attaquer pour un grand site Web?

Wordpress est relativement nouveau pour moi et l'idée des champs personnalisés m'a été présentée hier, donc l'exemple n ° 1 est tout ce que je sais vraiment sur les champs personnalisés.

Je cherche d'autres moyens de le faire et je suis prêt à prendre le temps d'apprendre à le faire correctement. Je ne m'attends pas à ce que ce soit facile. Cela va être fastidieux, car il y a tellement de pages, mais je ne veux tout simplement pas avoir l’air idiot de prendre une manière super étrangère de procéder.

Mon modèle cryptofact-page.php:

get_header(); ?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
<?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) : 
          dynamic_sidebar( 'cryptid-sidebar-widgets-left' ); endif; ?>
                </ul>
            </div>

<?php if ( have_posts() ) : ?>
    <!--if there are posts, start the loop-->
<div class="cryptid-container">
    <?php while ( have_posts() ) : the_post(); ?>
        <!--get the content template for the current post format.-->
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>


</div> <!-- .cryptid-container-->

    <?php else : ?>
    <!--If no content, get content template for 'no posts found'-->
<div class="cryptid-container">
    <?php get_template_part( 'content', 'none' ); ?>
</div>
    <?php endif; ?>
<div class="cryptid-sidebar-right"> 
    <ul class="cryptid-sidebar-widgets">
    <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets' );
endif; ?>
</ul>
</div>
<?php get_footer(); 
?>

My Sidebar: Actuellement, je n'ai pas besoin d'un fichier sidebar séparé -____. Php. Cela semble fonctionner en enregistrant simplement dans functions.php et en l'appelant dans le modèle. Mais si j'en avais un (ou s'il en fallait un pour cela), cela ressemblerait probablement à ceci:

<?php
/**
 * Displays sidebar widgets for front page
 *
 * @since ctheme 1.0
 */
?>

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php if ( is_active_sidebar( 'cryptid-sidebar-widgets-left' ) ) :
    dynamic_sidebar( 'cryptid-sidebar-widgets-left' );
endif; ?>

</ul>
</div>

Merci beaucoup pour toute votre aide et d'avoir pris le temps de lire ceci. J'espère avoir fourni suffisamment d'informations pour pouvoir être aidé dans cette tâche.

EDIT- Réponse potentielle:

J'ai donc recommencé à lire sur Custom Fields et à coder Meta Box dans le fichier functions.php. J'ai fait une pause et me suis rendu compte qu'il existait une solution simple issue de Exemple n ° 2 au-dessus: Widget texte et plug-in de logique de widget . Je veux toujours aborder ce problème de manière plus sophistiquée, mais je vais publier ici ce que j'ai fait pour que ce que je souhaite se réalise.

Le seul vrai problème avec le n ° 2 est que, lorsque je me suis penché sur la zone Customizer-Widget, sous la barre latérale gauche de Cryptid, tout ce que j'ai vu était le suivant:

Widget texte: faits en bref

Widget texte: faits en bref

Widget Texte: Faits en bref (et sur)

Comme indiqué ci-dessus, si je devais revenir en arrière pour modifier les données de texte de l'une de ces créatures, je ne saurais pas à quoi entrer en un coup d'œil. Donc, je suis simplement allé à la recherche d'un autre widget. Après avoir essayé quelques autres widgets de texte, je me suis installé sur Enhanced Text Widget . Ce widget m'a donné la possibilité de titrer le widget mais de ne pas afficher le titre dans la sortie.

J'ai intitulé le widget par le nom de la créature. Ensuite, dans le champ de texte, j'ai simplement donné au widget le titre "Faits rapides" avant toutes les autres données que j'avais codées pour les faits rapides. J'ai ensuite donné à ce titre la même div que le reste des titres de widgets, dans mon cas, il s'appelait "widgettitle"

<div class="widgettitle"><h2>Quick Facts</h2></div>

Cela a un peu altéré la taille de la police, mais le reste du style est là. Je peux résoudre ce problème facilement dans mon fichier style.css.

Ensuite, j'ai utilisé Widget Logic, qui ajoute un champ supplémentaire au bas de chaque widget. Donc, dans ce domaine, je peux taper ce qui suit pour qu'il ne s'affiche que pour cette page:

is_page('pageid')

En fin de compte, nous avons une zone de personnalisation de widget qui ressemble maintenant à ceci:

Texte amélioré: Loch Ness

Texte amélioré: Ogopogo

Texte amélioré: Bigfoot (et sur)

Chacun avec ses propres faits à l'intérieur et maintenant je peux rapidement voir le widget de la créature par rapport à avant.

Cela me semble un peu prétentieux de le faire de cette façon, comme si je devais prendre un chemin plus sophistiqué, mais ça marche et ça semble assez propre. Je ne sais pas si le site gérera bien cette x100, mais il ne semble pas que ce soit si difficile ou si lourd à traiter.

De plus, je viens de me rendre compte… Je dois faire quelque chose de similaire si je voulais une petite carte pour chaque emplacement d’animal au-dessus de la zone Faits rapides (comme indiqué dans l’image). Je vais devoir m'y attaquer aussi ... mais je pourrais simplement coller la carte dans le contenu de la page. Cela va être une barre latérale en peluche telle quelle.

Toute aide supplémentaire est grandement appréciée!

FINAL EDIT AND SOLUTION: Merci à Milo!

Prenant la réponse acceptée ci-dessous par Milo, j'ai décidé de mettre pleinement en œuvre les champs personnalisés. J'ai eu la peine de créer ma propre méta-boîte, qui est sortie assez décemment. J'ai fini par revenir à plugin Advanced Custom Fields parce que leurs boîtes de méta étaient plus agréables. Je n'ai même pas besoin du plugin, mais je l'ai gardé au cas où je voudrais l'utiliser pour quelque chose de plus compliqué à l'avenir. En utilisant plugin Advanced Custom Fields (ou la zone Custom Fields sans le plugin), j'ai créé la clé de champ personnalisé cryptid_post_class .

J'ai ensuite modifié mon modèle de page (cryptofacts-page.php) pour supprimer la barre latérale et y placer GET les données du champ personnalisé. Il est impératif d’utiliser les emballages appropriés, comme il apparaît avec la barre latérale d’avant (Miloisawesome).

get_header(); ?>

<div class="cryptid-sidebar-left">
<ul class="cryptid-sidebar-widgets-left">
    <?php
    $meta = get_post_meta(get_the_ID(), "cryptid_post_class", true);
    if( !empty($meta) ): 
    ?>
    <li>
        <?php echo $meta; ?>
    </li>
    <?php
    endif;
    ?>
</ul>
</div>


<?php if ( have_posts() ) : ?>
<!--if there are posts, start the loop-->
<div class="cryptid-container">
<?php while ( have_posts() ) : the_post(); ?>
    <!--get the content template for the current post format.-->
    <?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

Voici quelques images pour illustrer le processus.

  1. Configure le modèle avec les wrappers appropriés

enter image description here 2. Configuration de la zone Champs personnalisés

enter image description here 3. Résultat final moins quelques ajustements css puisque j'ai utilisé un modèle de sauvegarde en jouant avec ceci

enter image description here

J'espère que cela aidera tous les développeurs débutants de WordPress à clarifier les choses et à aborder les champs plutôt géniaux de WP!

5
Nimara

Vous pourriez enregistrer dynamiquement les barres latérales. Lorsque vous enregistrez des barres latérales, vous pouvez interroger toutes vos pages animales, les parcourir en boucle et enregistrer une barre latérale unique pour chaque page. Ajouter une page créerait automatiquement une barre latérale pour elle.

Cependant - cela fait beaucoup de barres latérales. Pour quelque chose étroitement lié au contenu de la page, je préférerais le manipuler avec des champs personnalisés via une méta-boîte personnalisée qui contenait votre (vos) champ (s) prédéfini (s).

Quant à savoir pourquoi votre utilisation de post meta a perturbé la mise en page de votre site, il s’agit probablement d’un problème de balisage/style. La solution la plus simple consiste peut-être à donner à la présentation une apparence correcte avec un widget barre latérale et texte, puis à copier le balisage généré lorsque vous affichez la page et à l’utiliser comme balisage pour les champs personnalisés. En regardant votre modèle ci-dessus, les widgets apparaîtront sous la forme <li>s dans un <ul>, alors essayez ceci lors de l'ajout de votre méta de publication:

<div class="cryptid-sidebar-left">
    <ul class="cryptid-sidebar-widgets-left">
        <?php
        $meta = get_post_meta(get_the_ID(), "your-key", true);
        if( !empty($meta) ): 
        ?>
        <li>
            <?php echo $meta; ?>
        </li>
        <?php
        endif;
        ?>
    </ul>
</div>
5
Milo

J'ai eu un site avec un problème qui ressemble beaucoup à celui que vous avez mentionné. J'ai utilisé un plugin "Personnalisé sidebars" Je crois qu'il a été appelé dans lequel il me permettrait de construire une barre latérale sur une page spécifique et par défaut s'il n'est pas défini. Est-ce ce que vous recherchez?

0
oompahlumpa