サポート » プラグイン » メニューに新着・更新マークを付けたい

  • 解決済 calgon

    (@calgon)


    困っていること:
    同名のトピックも参照いたしましたが、カスタムメニューを利用している場合に更新マークをつけることが出来ませんでした。

    やりたいこと:
    カスタムメニューを利用し、カテゴリを表示した際に「NEW」などのクラスを追加したい。(又は表示を追記したい)

    利用しているタグ:

    function special_nav_class($classes, $item,$args){
      if ( $args->theme_location !== 'sample' )
      return $classes;
      if(($item->object == 'category') or ($item->object == 'page')){
    
        if($item->object == 'page'){
          if(($post = get_post($item->object_id))){
            $now_date = date('U');
            $post_date = mysql2date('U',$post->post_modified); // 投稿日なら $post->post_date
            $diff_date = date('U',($now_date - $post_date )) / 86400;
            if((int)$diff_date <= 7){
              $classes[] = 'new';
            }
          }
        }
         if(($item->object == 'category')){
            $now_date = date('U');
            $post_date = mysql2date('U',$post->post_modified); // 投稿日なら $post->post_date
            $diff_date = date('U',($now_date - $post_date )) / 86400;
            if((int)$diff_date <= 7){
              $classes[] = 'new';
            }
         }
        return $classes;
    
      }
    }
    add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 3);

    過去の参考トピック:

    私は固定ページをメニューに登録し並べています。

    その固定ページを更新したり、(これは難しいかも知れませんが)新たに作ったときに、
    更新マーク(もしくはわかるような状態)が付くようしたいです。

    記事投稿には新着マークを付けるプラグインがあったりします。
    メニュー項目に対してそんなことができるプラグインはありませんか?

    • このトピックはcalgonが3年、 1ヶ月前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    カテゴリーメニューの $item->object_id はカテゴリー ID が格納されています。これで、最新の投稿を取得することになると思います。
    下記のようなコードでいかがでしょう。

    function my_nav_menu_css_class( $classes, $item, $args ) {
    	if ( 'sample' !== $args->theme_location  ) {
    		return $classes;
    	}
    
    	if ( 'page' === $item->object ) {
    		$post = get_post( $item->object_id );
    	} else if ( 'category' === $item->object ) {
    		if ( $posts = get_posts( array( 'posts_per_page' => 1, 'category' => $item->object_id ) ) ) {
    			$post = $posts[0];
    		}
    	}
    
    	if ( isset( $post ) ) {
    		$now_date = date( 'U' );
    		$post_date = mysql2date( 'U', $post->post_modified ); // 投稿日なら $post->post_date
    		$diff_date = date( 'U', ( $now_date - $post_date )) / 86400;
    		if ( (int) $diff_date <= 7 ) {
    			$classes[] = 'new';
    		}
    	}
    
    	return $classes;
    }
    add_filter( 'nav_menu_css_class', 'my_nav_menu_css_class', 10, 3 );
    トピック投稿者 calgon

    (@calgon)

    望む形に出来ました。
    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「メニューに新着・更新マークを付けたい」には新たに返信することはできません。