web-dev-qa-db-fra.com

Comment mettre en surbrillance le menu d'une page enfant?

EDIT: Ceci était

Comment forcer une page à être is_archive == true?

J'essayais de résoudre le mauvais problème. Au lieu de forcer la publication/la page à avoir un attribut particulier, j'aurais dû regarder les classes appliquées à l'élément de menu. L'élément de menu 'Blog' a la classe current-page-ancestor qui lui est appliquée. Je peux styler le menu en fonction de cela.

QUESTION ORIGINALE:

J'ai mon propre thème où j'ai créé un modèle archives.php afin d'avoir une page qui tente de répertorier les différentes manières de visualiser les archives et de donner aux utilisateurs un endroit où les parcourir s'ils le souhaitent.

J'ai créé une page à l'aide de la page WP admin et la page "Blog" de la page parente. La page "Blog" est la page où tous mes messages sont émis. J'ai un menu en haut et à l'heure actuelle, chaque sous-page sous la page "Blog" fait en sorte que le menu mette en évidence "Blog" (il s'agit du comportement correct). Spécifiquement, l'élément de menu a le style current_page_* qui lui est appliqué. Cela ne se produit pas lorsque vous chargez blog/archives (le modèle/la page que j'ai créé dans le premier paragraphe).

Ainsi, lorsque je clique sur la date d'un article de blog, cela m'amène à une page d'article archivée qui ressemble à ceci (notez que l'élément de menu Blog est mis en surbrillance):

Archived Date Posts

Lorsque je vais dans mes archives, cela ressemble à ceci (notez que l'élément de menu n'est PAS mis en surbrillance):

Archives Page

J'ai regardé $wp_query pour voir quelle était la différence. J'ai vu que is_archive ou is_home était vrai dans les cas où l'élément de menu était correctement stylé.

Comment puis-je forcer ma page à être is_archive == true? J'ai essayé d'insérer une $wp_query->set('is_archive', 1); avant l'appel de get_header(); dans mon modèle, mais cela n'a pas fonctionné. J'ai également consulté le tableau de bord WP admin pour voir si je pouvais cliquer avec quelque chose pour forcer la page à être considérée comme une archive.

Edit: Pour être clair, je cherche une solution WP. Je sais que je peux coder en dur le code CSS pour que l'élément de menu apparaisse tel que je le souhaite, mais cela ne semble pas être la bonne chose à faire.

2
Avery Chan

Selon le changement de question, la réponse est la suivante:

  1. Regardez les classes CSS qui sont appliquées à l'élément de menu qui vous intéresse.
  2. L'option de menu dont cette page devrait être un enfant devrait avoir current-page-ancestor qui lui est appliqué.
  3. Apportez les modifications appropriées dans votre feuille de style pour styler le menu lorsque cette classe apparaît.
1
Avery Chan

Le fichier de modèle archives.php est un fichier de modèle de page personnalisé pour une page statique . Les conditions is_archive() et is_home() s'appliquent aux archives des articles de blog et index des articles de blog , respectivement. Alors, vous êtes ne jamais obtenir que is_archive() renvoie true en affichant le résultat de archives.php.

Pour que votre archives.php page statique apparaisse dans le menu:

  1. Créez une nouvelle page statique, nommée par exemple. "Archives" (mais c'est complètement arbitraire)
  2. Attribuer le modèle de page personnalisé archives.php à cette page statique
  3. Ajouter cette page statique à votre menu de navigation personnalisé

Ensuite, vous devriez le voir surligner correctement dans le menu.

1
Chip Bennett

Est-ce que tout ce qui vous préoccupe est de montrer que l'onglet du blog est en surbrillance, lorsque vous êtes sur une page d'archive? - Alex Thomas Il y a 38 minutes


Oui. C'est tout ce qui me dérange. Je suppose qu'un moyen simple de reformuler ceci est que ma page de modèle personnalisé n'est pas reconnue comme une page d'archive. - Avry il y a 18 minutes

Si tel est le cas, vous pouvez être un peu brutal et définir le style de l'onglet blog dans votre modèle archives.php, en utilisant soit <style>...</style>, soit donner à l'onglet blog la classe sélectionnée en utilisant jquery:

$('#blogtabid').addClass('selectedclass');

Comment sur cela?

0
Alex Thomas

Vous avez raison d'aller à l'objet $wp_query.

$wp_query->is_archive = true;

0
two7s_clash

Je suis tombé sur quelque chose comme ceci récemment pour mettre en évidence les termes si un seul message est actif et pour être honnête, je devais utiliser du jQuery pour cela. Ce n'est pas joli mais ça marche pour le moment. Wordpress manque de cette fonctionnalité qui je suis d'accord est nul Vous pouvez toujours utiliser une fonction pour la charger pour certaines pages.

Exemple:

function wpse_20163_navstyle() {
    if(is_archive()) { ?>
        <script type="text/javascript">
        jQuery(document).ready(function(){
            jQuery('#blogtabid').addClass('selectedclass');
        });
        </script>
    <? }
add_action('wp_head','wpse_20163_navstyle')

De plus, si vous souhaitez utiliser le $wp_query, assurez-vous également d'avoir un code global.

global $wp_query; et ensuite vous pouvez $wp_query->is_archive = true;

0
xLRDxREVENGEx