web-dev-qa-db-ja.com

「Home」リンクを非表示にする可能性がある推奨ブレッドクラムプラグイン

私は自分のページで Breadcrumb NavXT プラグインを使用していますが、現在は問題に直面しています

いくつかのページで "Home"リンクを隠す必要があります。それをCSSで隠すか、まったく作成しないことで実現できます。 PHPで

私がCSSを使いたいのなら - 最初のリンクとその ">>"セパレータのための表示はありません - それに対するidや特別なクラスはありません

そのような場合にまったくそれを作成しないというPHP解決策を使用する場合 - 私の問題は、 "bcn_display()"関数にパラメータを送信できないことです

現在のプラグインでそれを行うことができますか、それとももっと良いものがありますか?

ありがとうございます。

2
zina

更新

Mtekkの答え は基本的に私がプラグイン自体に触れる必要なしに提案していたことをするので、私の答えは全く理論的な性質のものです。 彼は簡単にそれを行う方法について説明します


あなたが主にプラグインに自信を持っているように(変更するにはちょっとしたことを言って)そうするのが最も簡単なことだと思う、それはプラグインをハックしてフィルターフックを挿入することであろう。それからあなたはあなたのニーズに基づいてフィルタリングすることができます。あなたがコードを共有するならば、これはオリジナルのプラグインにさえするかもしれないので、あなたは更新の恩恵を受けることができます。

例:

ファイルbreadcrumb_navxt_class.phpを参照してください。フィルタを作成するために単一の関数を少し変更しました。

/**
 * add
 * 
 * Adds a breadcrumb to the breadcrumb trail
 * 
 * @return pointer to the just added Breadcrumb
 * @param bcn_breadcrumb $object Breadcrumb to add to the trail
 */
function &add(bcn_breadcrumb $object)
{
    $doAdd = true;
    $doAdd = do_filter('_bcn_breadcrumb_trail_add_filter', $doAdd, $object);
    if ($doAdd) {
        $this->trail[] = $object;  
        return $this->trail[count($this->trail) - 1];
    } else {
        return $object; // NOTE: violates function return spec but prevents errors later on.
    }
}

導入されたフィルタは_bcn_breadcrumb_trail_add_filterという名前です。これで、そのフィルタをフックしてFALSEを返すことができます。これにより、$objectがブレッドクラム・トレイルに追加されなくなります。

あなたのフィルタでは、$objectに基づいてそれを追加するかどうかを決めることができます。これはbcn_breadcrumbなので、titleメンバーが自宅を探しているかどうかを確認できます。

 $object->title

あなたがする必要がある唯一のことはいくつかのコードを追加することです:

 add_filter('_bcn_breadcrumb_trail_add_filter', function($doAdd, $object) {
     if ($object->title === 'Home'
         && /* this is a page I don't want to have it displayed */) {
         $doAdd = false;
     }
     return $doAdd;
 });

ところで、プラグインの作者は時々ここにいますので、おそらく彼もこれに関するいくつかのフィードバックを持っています。

1
hakre

ホームブレッドクラムを隠そうとしているのはどのようなページですか?ホームページにある場合は、呼び出しをis_front_pageのチェックでラップします。 if(!is_front_page){bcn_display();}

ホームブレッドクラムをまったく使用したくない場合は、「ホームブレッドクラムをトレイルに配置する」ことを確認してください。設定ページではチェックされていません。

ホームブレッドクラムを条件付きで削除したい場合(正直に言って意味がありませんが、何でも)。 bcn_after_trailアクションを見てください。これは現在のbreadcrumb_trailオブジェクトを渡し、トレイル配列の最後のメンバー(ホームブレッドクラム)をポップオフできます。

例は次のとおりです。add_action('bcn_after_fill', 'foo_pop'); function foo_pop(&$trail) { if(is_page('foo')) { array_pop($trail->trail); } }

スラッグ 'foo'のあるページのトレイルからホームブレッドクラムを削除します。

3
mtekk

Breadcrumb Trail を試してみてください。私はソースをちょっと見てみましたが、フィットする引数'show_home' => __( 'Home', $textdomain ),を受け入れるようです

1
Rarst

あなたのテーマの中でカスタム関数を使うこともできます。「Home」の例に従ってください。あなたはこれをコメントするか削除することができます

if ( !function_exists('fb_breadcrumb_nav') ) {
        function fb_breadcrumb_nav() {
                if ( !is_home() || !is_front_page() ) {
                        echo '<p class="breadcrumb"><a href="';
                        echo get_option('home');
                        echo '">';
                        bloginfo('name') . _e('</a> &raquo; ', FB_BASIS_TEXTDOMAIN);
                        if ( is_category() || is_single() ) {
                                $category = get_the_category();
                                $ID = $category[0]->cat_ID;
                                echo get_category_parents($ID, TRUE, __(' &raquo; ', FB_BASIS_TEXTDOMAIN), FALSE );
                        } elseif (is_page() && $post->post_parent ) {
                                _e( get_the_title($post->post_parent) );
                                _e(' &raquo; ');
                                _e( the_title() );
                        } elseif ( is_search() ) {
                                _e('Suche nach: ', FB_BASIS_TEXTDOMAIN) . the_search_query() . _e('</p>');
                        }
                }
        }
}

homeなしの例

if ( !function_exists('fb_breadcrumb_nav') ) {
        function fb_breadcrumb_nav() {
                if ( !is_home() || !is_front_page() ) {
                        echo '<p class="breadcrumb">';
                        _e( ' &raquo; ', FB_BASIS_TEXTDOMAIN );
                        if ( is_category() || is_single() ) {
                                $category = get_the_category();
                                $ID = $category[0]->cat_ID;
                                echo get_category_parents($ID, TRUE, __(' &raquo; ', FB_BASIS_TEXTDOMAIN), FALSE );
                        } elseif (is_page() && $post->post_parent ) {
                                _e( get_the_title($post->post_parent) );
                                _e(' &raquo; ');
                                _e( the_title() );
                        } elseif ( is_search() ) {
                                _e('Suche nach: ', FB_BASIS_TEXTDOMAIN) . the_search_query() . _e('</p>');
                        }
                }
        }
}
1
bueltge

信じられないが、再び私は自分で解決策を見つけました。

それはおそらく私にインスピレーションを与えたのです - ありがとう:)

トレイルで "home"リンクを取得したくない場合は、bcn_display()にパラメータを渡すことにしました。デフォルトでは、このパラメータはtrueに設定されています。
[ホーム]リンクを表示したくない場合)trueを送信

今私はこれらの関数にパラメータの宣言を追加し、いくつかのコードを追加しました

//in file breadcrumb_navxt_class.php

function do_home($displayhome=true)
{...

if(($this->opt['home_display'])&&($displayhome))

...}

function fill($displayhome=false)
{...

if(!is_front_page())
{

     $this->do_home($displayhome);

}

...}

function display($displayhome=true,$return = false, $linked = true, $reverse = false)
{...}

//in file breadcrumb_navxt_admin.php

function display($displayhome=true,$return = false, $linked = true, $reverse = false)
{
        //Grab the current settings from the DB

        $this->breadcrumb_trail->opt = $this->get_option('bcn_options');

        //Generate the breadcrumb trail

        $this->breadcrumb_trail->fill($displayhome);

        return $this->breadcrumb_trail->display($displayhome,$return, $linked, $reverse);

}

function bcn_display($displayhome=true,$return = false, $linked = true, $reverse = false) {

        global $bcn_admin;

        return $bcn_admin->display($displayhome,$return, $linked, $reverse);

}
1
zina