2012-11-19 23 views
6

Sayfa başlığını gizlemek için aşağıdaki işlevi oluşturdum. Ama bunu çalıştırdığımda da menü adını da gizler. Herhangi biri, çok takdir göreceği konusunda yardımcı olabilir.Neden the_title() filtresi menü başlığında da uygulanır?

function wsits_post_page_title($title) { 
       if(is_admin()) 

     return $title; 

    $selected_type = get_option('wsits_page_show_hide'); 

    if(!is_array($selected_type)) return $title; 

    if ((in_array(get_post_type(), $selected_type)) && get_option('wsits_page_show_hide')) 
    { 
     $title = ''; 
    } 
    return $title; 
} 
add_filter('the_title', array($this, 'wsits_post_page_title')); 
+6

Menü öğelerinin de başlıkları olduğundan ve bunların filtrelenmesi gerekiyor :). Bu sizin temanızsa, menüyü görüntülemeden önce filtreyi kaldırabilir ve ardından tekrar ekleyebilirsiniz. Alternatif olarak, tersini yapabilir ve filtreyi yalnızca ihtiyacınız olduğunda ekleyebilirsiniz. –

+2

Birisi menü süzgecini görüntüledikten sonra bir filtreyi kaldırmak ve geri eklemek için nasıl olurdu? –

cevap

9

Nikola doğrudur:

menü öğeleri de başlıkları var ve onlar :) filtrelenmesi gerekir çünkü.

yayınlarında bu sadece arama yapmak için değil, menülerde, sen in_the_loop() bir çek ekleyebilirsiniz - eğer doğruysa, bir yazı konum.

Yani fonksiyon olarak ilk satırı değiştirin:

if(is_admin() || !in_the_loop())

ve tüm iyi olmalıdır.

+0

thank you verymuch – softsdev

+0

@Paul Bu, özel menü içeren pencere öğesi için çalışmıyor. –

3

Böyle bir şey yapabilirsiniz: In

senin function.php:

$dontTouch = 1; 
wp_nav_menu(array('menu' => 'MyMenu')); 
$dontTouch = 0; 
+2

Temiz değil, basit ve işe yarıyor. – sglessard

3

Bir kesmek biraz ama ekleyerek bu çözebilir: Şablonunuzda

add_filter('the_title', 'ze_title'); 
function ze_title($a) { 
    global $dontTouch; 
    if(!$dontTouch && !is_admin()) 
     $a = someChange($a); 
    return $a; 
} 

eyleminizi loop_start. Bir loop_start eylem içine the_title filtreyi yerleştirerek

function make_custom_title($title, $id) { 
    // Your Code Here 
} 

function set_custom_title() { 
    add_filter('the_title', 'make_custom_title', 10, 2); 
} 

add_action('loop_start', 'set_custom_title'); 

, biz menü başlığı niteliklerini üzerine yazarak kaçının.

0

Bu yanıtı, gezinme öğeleri için filtre etkisini görmezden gelerek, filtre kancası the_title'u hedeflerken arama yaptığım sırada arama sonuçlarından çıktığım için gönderdim.

Bir başlık altındaki bölümde, bir başlık altındaki sayfa başlığına düğmeler eklemek istediğim bir bölümde çalışıyordum.

<?php echo '<h1>' . apply_filters('the_title', $post->post_title) . '</h1>'.PHP_EOL; ?> 

Sonra bu gibi "in çengel" idi:

Şuna benzer görünüyordu

add_filter('the_title', 'my_callback_function'); 

Ancak, yukarıda hedefler the_title filtre kanca çağırır anlamıyla her şey ve bu, gezinme öğelerini içerir.

Böyle filtre kanca şeklinde değiştirilmiştir:

<?php echo '<h1>' . apply_filters('the_title', $post->post_title, $post->ID, true) . '</h1>'.PHP_EOL; ?> 

Hemen hemen her çağrı the_title filtre $post->ID olarak $post->post_title olarak parametre 1 ve parametre 2 geçer. apply_filters('the_title'* için WordPress çekirdek kodunu arayın ve kendiniz göreceksiniz.

Bu nedenle, the_title filtresini çağıran belirli öğeleri hedeflemek istediğim durumlar için üçüncü bir parametre eklemeyi seçtim. Bu şekilde, varsayılan olarak the_title filtre kancasına uygulanan tüm geri bildirimlerin avantajını elde edebilirim, ayrıca üçüncü parametreyle the_title filtre kancasını kullanan öğeleri yarı-benzersiz olarak hedefleme yeteneğine sahip olabilirim. Ancak istiyorum değişkenler

/** 
* @param String $title 
* @param Int $object_id 
* @param bool $theme 
* 
* @return mixed 
*/ 
function filter_the_title(String $title = null, Int $object_id = null, Bool $theme = false) { 

    if(! $object_id){ 
     return $title; 
    } 

    if(! $theme){ 
     return $title; 
    } 

    // your code here... 

    return $title; 

} 

add_filter('the_title', 'filter_the_title', 10, 3); 

Etiket:

Bu basit boolean parametre var. Benim için işe yarayan şey buydu ve yapmak için tam olarak ihtiyacım olan şeyi yapıyor. Bu cevap, sorulan soruyla% 100 ilgili olmayabilir, ancak bu sorunu çözmek için arama yaparken buraya geldim. Umarım bu benzer bir durumda birine yardımcı olur.

İlgili konular