Yanıtlar:
Bu, wp_nav_menu_objects
hangi öğenin geçerli menü öğesi olduğunu kontrol etmek için en kolay yer olan filtreleme ile mümkündür , çünkü WordPress zaten sınıfları sizin için ekledi .
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ( $menu_item->current ) {
$GLOBALS['wpse16243_title'] = $menu_item->title;
break;
}
}
return $sorted_menu_items;
}
Artık normal başlık yerine bu yeni global değişkeni kullanabilirsiniz. Basit örnek:
add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
if ( isset( $GLOBALS['wpse16243_title'] ) ) {
return $GLOBALS['wpse16243_title'];
}
return $cat_title;
}
Tabii ki, bu sadece başlığı görüntülemeden önce menüyü görüntülerseniz işe yarar. Daha önce ihtiyacınız varsa (belki <title>
öğede?), Önce menüyü oluşturmalı ve daha sonra görüntülemelisiniz .
wpse16243_wp_nav_menu_objects
Geçerli menü kimliğini almak için kullanmayı denedim . Ama tutarlı değil. Ana sayfa ve bir menü öğesi arasında geçiş yapmak bana her zaman doğru menü öğesini vermez - bu tür bir "gecikmeler". Geçerli menü kimliğini nasıl alabileceğime dair herhangi bir öneriniz var mı?
wpse16243
? Bu garip ismi oldukça yaygın görüyorum ve bunun ne hakkında olduğunu merak ediyorum. Feragatname: Wordpress çaylak.
WordPress Stack Exchange question number 16243
. Kullanıcılar bu kodu doğrudan kopyalarsa, aynı işlev adlarını paylaşabilecek diğer eklentilerle çakışmaz.
Kullanabilirsiniz wp_get_nav_menu_items()
. İşte bir örnek function
:
<?php
function my_get_menu_item_name( $loc ) {
global $post;
$locs = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locs[$loc] );
if($menu) {
$items = wp_get_nav_menu_items($menu->term_id);
foreach ($items as $k => $v) {
// Check if this menu item links to the current page
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
Ardından çağrı function
ile Konum adının ait nav menüsüne Eğer kullanım isteyen:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'
echo $menu_name;
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ($menu_item->current ) {
$GLOBALS['currentMenuTitle'] = $menu_item->title;
$GLOBALS['currentMenuID'] = $menu_item->ID;
break;
}
}
return $sorted_menu_items;
}
function get_menu_items_children( $menu_item_id='' )
{
global $wpdb;
// AND meta_key='_menu_item_menu_item_parent'
$myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );
foreach ( $myrows as $menu_item ) {
$sc = get_object_vars($menu_item);
$myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );
foreach ( $myrowsb as $menu_itemb ) {
$scb = get_object_vars($menu_itemb);
$pmIDs[] = $scb['meta_value'];
}
}
return $pmIDs;
}
Tam olarak takip ettiğimden emin değilim.
"Desteklediğimiz Müzeler", bir Yazı Başlığı, Sayfa Başlığı, Kategori Başlığı vb. Tarafından oluşturulur (veya Özel Gezinme Menüsü kullanıyorsanız özel bir Başlık olabilir).
Bu metinle ne yapmaya çalışıyorsunuz? Nerede göstermeye çalışıyorsunuz? Kategori Dizini Sayfasında göstermeye çalıştığınızı varsayıyorum (belirttiğinizden beri current-menu-item
)? Öyleyse <?php single_cat_title(); ?>
Kategori Başlığı'nın çıktısını almanız yeterlidir .
Ek kategori bilgilerine ihtiyacınız varsa, aşağıdakiler gibi bir şey kullanabilirsiniz:
$cat = get_the_category();
$currentcat = $cat[0];
Bu, aşağıdaki değişkenleri kullanılabilir kılar:
$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)
Eğer bir yere iseniz diğer Kategori Endeksi Sayfa yerine, bu işlevler $ CatID geçmesi gerekir.
DÜZENLE:
"Desteklediğimiz Müzeler" in özel bir Menü Başlığı olduğunu belirttiğiniz için, en kolay yaklaşım Kategoriyi "Müzeler" den "Desteklediğimiz Müzeler" olarak yeniden adlandırmak olacaktır (not: museums
değiştirmeyi bırakabilirsiniz ). Ancak bunu yapmak, "Desteklediğimiz Müzeler" in, şablonunuzda çıktı alınabilecek her yerde Kategori Başlığı olarak görüntüleneceği anlamına gelir. Bu kabul edilebilirse, endişelenmeyin.
Aksi takdirde, belirli menü öğesinin Başlığını almak için wp_get_nav_menu_items()
( Codex ref ) gibi bir şey kullanmanız gerekir .
wp_get_nav_menu_items()
.