12

ページタイトルを非表示にする関数を以下に作成しました。しかし、実行するとメニュー名も非表示になります。

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') );
4

6 に答える 6

14

ニコラは正しいです:

メニュー項目にもタイトルがあり、フィルタリングする必要があるためです:)。

これをメニューではなく投稿でのみ呼び出すには、チェックを追加できますin_the_loop() -それがtrueの場合、あなたは投稿にいます。

したがって、関数の最初の行を次のように変更します。

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

そして、すべてがうまくいくはずです。

于 2012-11-19T15:43:51.067 に答える
6

ちょっとしたハックですが、loop_startにアクションを追加することでこれを解決できます。

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' );

loop_startアクション内にthe_titleフィルターを埋め込むことにより、メニュータイトル属性の上書きを回避します。

于 2014-10-16T08:52:23.977 に答える
4

あなたはそのようなことをすることができます:

あなたのfunction.php

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

テンプレート内:

$dontTouch = 1;
wp_nav_menu( array('menu' => 'MyMenu') );
$dontTouch = 0;
于 2012-12-11T22:09:34.627 に答える
1

the_titleナビゲーションアイテムのフィルター効果を無視して、フィルターフックのターゲットを検索しているときにクリックしてしまった検索結果だったので、この回答を投稿しました。

見出し1タグ内のページタイトルにボタンを追加したいテーマのセクションに取り組んでいました。

これに似ています:

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

その後、私は次のように「フックイン」していました。

add_filter( 'the_title', 'my_callback_function' );

ただし、上記は文字通りthe_titleフィルターフックを呼び出すすべてのものを対象としており、これにはナビゲーションアイテムが含まれます。

フィルタフックの定義を次のように変更しました。

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

the_titleフィルタを呼び出すほとんどすべての呼び出しで、パラメータ1がとして渡され$post->post_title、パラメータ2がとして渡されます$post->ID。WordPressのコアコードを検索するapply_filters( 'the_title'*と、自分の目で確かめることができます。

the_titleそこで、フィルターを呼び出す特定のアイテムをターゲットにする状況のために、3番目のパラメーターを追加することにしました。このようにして、デフォルトでフィルターフックに適用されるすべてのコールバックのメリットを享受しながら、3番目のパラメーターでフィルターフックをthe_title使用するアイテムを半一意にターゲットにすることもできます。the_title

これは単純なbooleanパラメータです。

/**
 * @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 );

必要に応じて変数にラベルを付けます。これは私のために働いたものであり、それは私がそれをするのに必要なことを正確に行います。この回答は、尋ねられた質問に100%関連していない可能性がありますが、この問題を解決するために検索しているときに私が到着した場所です。これが同様の状況の誰かに役立つことを願っています。

于 2017-01-23T23:01:47.977 に答える
0

グローバル$dontTouch ; 何らかの理由で解決策がうまくいきませんでした。だから私は単にメニューの周りのフィルターを削除したので、header.phpにあります:

remove_filter( 'the_title', 'change_title' );
get_template_part( 'template-parts/navigation/navigation', 'top' ); 
add_filter( 'the_title', 'change_title' );

そして、すべてが順調です。

于 2018-11-20T15:34:44.393 に答える
0

私はあなたがこれを探していると思います:

function change_title($title) {
    if( in_the_loop() && !is_archive() ) { // This will skip the menu items and the archive titles
        return $new_title;              
    }    
    return $title;    
}
add_filter('the_title', array($this, 'change_title'), 10, 2); 
于 2019-01-25T18:23:21.497 に答える