以下をテーマの functions.php に書けばOK◎
※(3)は「カスタムメニューウィジェット」を使えば良いです。
add_filter( 'wp_nav_menu_objects', 'my_nav_menu_objects', 10, 2 );
function my_set_new_to_ancestor( $items, $item_id ) {
if ( 0 == $item_id )
return;
foreach ( $items as $item ) {
if ( $item_id == $item->ID ) {
my_set_new_to_ancestor( $items , $item->menu_item_parent );
$item->new = true;
}
}
}
function my_nav_menu_objects( $sorted_menu_items, $args ) {
global $wpdb;
$post_ids = (array) $wpdb->get_col( $wpdb->prepare( "
SELECT p.ID FROM $wpdb->posts as p
WHERE p.post_type IN ( 'post', 'page' ) AND p.post_status = 'publish'
AND TO_DAYS(NOW()) - TO_DAYS(p.post_date) <= %d
", 7 /* 何日前までを New とするかを指定します */
) );
$cat_ids = wp_get_object_terms( $post_ids, 'category', array( 'fields' => 'ids' ) );
if ( ! empty( $post_ids ) ) {
foreach ( $sorted_menu_items as &$item ) {
switch ( $item->object ) {
case 'page':
if ( in_array( $item->object_id, $post_ids ) )
$item->new = true;
break;
case 'category':
if ( in_array( $item->object_id, $cat_ids ) )
$item->new = true;
break;
}
if ( isset( $item->new ) )
my_set_new_to_ancestor( $sorted_menu_items, $item->menu_item_parent );
}
}
return $sorted_menu_items;
}
add_filter( 'walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4 );
function my_walker_nav_menu_start_el( $item_output, $item, $depth, $args ) {
if ( isset( $item->new ) ) {
// New の表示の仕方はお好みで。
$item_output = preg_replace( '@</a>@', ' new</a>', $item_output );
}
return $item_output;
}
ありがとうございます!
早速、先ずは(1),(2)について、ということでfunctions.phpに追加しました。
しかし、カスタムメニューには変化がありませんでした。(1月5日と6日の投稿がある「ニュース」カテゴリーがありますが、newが出ません)
当方は、twentytenによる「子テーマ」を使用しています。位置に関係するかどうか不明ですが、まずは子テーマのfunctions.phpの末尾に追加しました。
違っている点、忘れている点があるのかもしれません。よろしくお願いいたします。
ありがとうございました。出ています!
スタイルを指定していなかったため、通常のタイトルと同じカラーだったため、気づきにくかっただけでした。
誠にありがとうございました。
ちなみに、カスタム投稿タイプのアーカイブにも同様なことを実施する場合は、 WHERE p.post_type IN ( 'post', 'page' )
に、’post_type’を追加することでよいでしょうか?