it-swarm.com.de

Hinzufügen der Klasse "current_page_item" für ein benutzerdefiniertes Beitragstyp-Menü

Ich verwende Folgendes, um eine Liste der Beiträge anzuzeigen, die in einem benutzerdefinierten Beitragstyp erstellt wurden.

$args = array(
  'post_type'=>'portfolio',
  'title_li'=> __('Portfolio')
);
wp_list_pages( $args ); 

Es wird jedoch keine Klasse zum Listenelement der aktuellen Seite hinzugefügt (current_page_item). Irgendwelche Ideen, wie ich das umsetzen könnte?

2
Red
1
Red

Überprüfen Sie dieses Ticket: http://core.trac.wordpress.org/ticket/17590

Quickfix von husobj:

function my_page_css_class( $css_class, $page ) {
    global $post;
    if ( $post->ID == $page->ID ) {
        $css_class[] = 'current_page_item';
    }
    return $css_class;
}
add_filter( 'page_css_class', 'my_page_css_class', 10, 2 );

Der Quickfix könnte eine einfachere Alternative sein? Prost

3
lepardman

Mit diesem Code können Sie den übergeordneten Beitragstyp im Menü aktivieren:

<?php

add_action('nav_menu_css_class', 'add_current_nav_class', 10, 2 );

function add_current_nav_class($classes, $item) {

    // Getting the current post details
    global $post;

    // Getting the post type of the current post
    $current_post_type = get_post_type_object(get_post_type($post->ID));
    $current_post_type_slug = $current_post_type->rewrite[slug];

    // Getting the URL of the menu item
    $menu_slug = strtolower(trim($item->url));

    // If the menu item URL contains the current post types slug add the current-menu-item class
    if (strpos($menu_slug,$current_post_type_slug) !== false) {

       $classes[] = 'current-menu-item';

    }

    // Return the corrected set of classes to be added to the menu item
    return $classes;

}

?>

Ich habe diesen Code gefunden in diesem Gist und er hat bei mir funktioniert - er markiert die übergeordnete Navigation als aktiv, wenn in einem benutzerdefinierten Beitrag ein einzelner Beitrag eingegeben wird.

1
Jatinder Kaur

Sie müssen dies zu Ihrer functions.php hinzufügen:

function kct_page_css_class( $css_class, $page, $depth, $args, $current_page ) {
  if ( !isset($args['post_type']) || !is_singular($args['post_type']) )
    return $css_class;

  global $post;
  $current_page  = $post->ID;
  $_current_page = $post;
  _get_post_ancestors($_current_page);

  if ( isset($_current_page->ancestors) && in_array($page->ID, (array) $_current_page->ancestors) )
    $css_class[] = 'current_page_ancestor';
  if ( $page->ID == $current_page )
    $css_class[] = 'current_page_item';
  elseif ( $_current_page && $page->ID == $_current_page->post_parent )
    $css_class[] = 'current_page_parent';

  return $css_class;
}
add_filter( 'page_css_class', 'kct_page_css_class', 10, 5 );

Via http://kucrut.org/wp_list_pages-for-custom-post-types/

0
bryceadams
if(site_url()."/".get_post_type() == $menu_item->url || site_url()."/".$post->post_name == $menu_item->url){#STUFF TO IDENTIFY ON FRONT}

hilft mir, die derzeit aktive Klasse zum aktuellen Menüelement hinzuzufügen, wenn ich wp_get_nav_menu_items als foreach($primary_nav_menu_items as $n => $menu_item){#do something} LOOP. Es kann jemandem helfen.

0

Ich möchte eine Problemumgehung hinzufügen, die in meiner Situation funktioniert hat.

Ich hatte einen benutzerdefinierten Beitragstyp mit benutzerdefinierter Taxonomie und wollte diese Beiträge auflisten, sofern sie einer bestimmten benutzerdefinierten Kategorie angehören - mit der aktuellen Seitenklasse in der li.

Der obige Code* hat eine Liste aller Beiträge erstellt, aber keine Kategorien gefiltert.
* [Anmerkung des Herausgebers] Die Antwortreihenfolge kann variieren, nicht sicher, auf welchen Code verwiesen wird.

Meine Lösung stammt aus diesem Code, ich bin nicht sicher, ob es sich um eine bewährte Methode handelt, aber sie funktioniert.

<?php
// get current page/post ID
$pageID = get_the_ID();
query_posts( array( 'post_type' => 'developments', 'custom_cat' => 'current' ) );
if ( have_posts() ) : 
    while ( have_posts() ) : 
        the_post();
        // test if current page/post ID matches
        if ( $post->ID == $pageID ) {
            $class = 'current_page_item';
        } else {
            $class = '';
        }
?>
        <li <?php if ($class != '') echo 'class="'.$class.'"'; ?>>
            <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
        </li>
<?php 
    endwhile; 
endif; 
wp_reset_query(); 
?>
0
FLOQ Design