推荐的面包屑插件,可以隐藏“Home”链接

时间:2010-11-23 作者:zina

我正在使用Breadcrumb NavXT 插件在我的页面中,但现在我面临一个问题

我需要在一些页面中隐藏“主页”链接。我可以通过将它隐藏在CSS中或根本不创建它来做到这一点。在PHP中

如果我想使用CSS-我没有任何关于第一个链接及其“>>”分隔符的指示-它没有id或特殊类

如果我选择在这些情况下根本不创建它的PHP解决方案,我的问题是我无法向“bcn\\u display()”函数发送任何参数

我可以用我当前的插件来完成吗?或者有更好的插件?

谢谢

5 个回复
最合适的回答,由SO网友:hakre 整理而成

更新

Mtekk\'s answer 基本上就是我所建议的,不需要触摸插件本身,所以我的答案是理论性的。He describes how to do that easily.

我认为最简单的方法是破解插件并插入一个过滤器挂钩,因为你主要对插件有信心(说一些小的改变)。然后,您可以根据需要进行筛选。如果您共享代码,这可能会使其甚至成为原始插件,因此您可以受益于更新。

示例:

请参阅文件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;
 });
顺便说一句,插件的作者经常在这里,所以他可能对此也有一些反馈。

SO网友:mtekk

你想在什么样的页面上隐藏家庭面包屑?如果只是在主页上,请在通话中勾选is_front_page e、 g。if(!is_front_page){bcn_display();}

如果你根本不想要家里的面包屑,请确保“将家里的面包屑放在小路上”未在“设置”页面上选中。

如果您想有条件地删除家庭面包屑(老实说,这样做没有意义,但无论如何)。查看bcn\\u after\\u trail操作。它将传入当前的breadcrumb\\u trail对象,您可以弹出trail数组中的最后一个成员(主breadcrumb)。

例如:add_action(\'bcn_after_fill\', \'foo_pop\'); function foo_pop(&$trail) { if(is_page(\'foo\')) { array_pop($trail->trail); } }

这将从带有slug“foo”的页面的轨迹中删除主面包屑。

SO网友:Rarst

尝试Breadcrumb Trail, 我快速查看了源代码,它似乎接受了合适的论点\'show_home\' => __( \'Home\', $textdomain ),

SO网友:bueltge

您还可以在主题中使用自定义函数,以“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>\');
                        }
                }
        }
}
现在是一个没有家的例子

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

SO网友:zina

难以置信,但我还是自己找到了解决办法。。

也许是u给了我灵感-thanx:)

我决定向bcn\\u display()传递一个参数,以防我不想在跟踪中获得“home”链接。默认情况下,该参数设置为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);

}

相关推荐

插件放置在/wp-content/plugins内的文件夹中时不保存值

我得到了WordPRess插件的以下代码,它在每个页面/后期编辑屏幕上添加了两个自定义输入。然后将这些值保存并输出到前端页面的标题中。如果代码位于内部,则可以正常工作。php文件并直接放入“wp内容/插件”。然而,如果我把它放在插件(如“wp-content/plugins/myplugin”)中自己的文件夹中,那么在通过编辑屏幕保存帖子/页面时,输入字段不会保存。此外,它不会向前端页面html标题部分输出任何内容。这似乎是一个被放弃的项目,所以我无法与原始开发人员一起制定解决方案。然而,代码中的某些内容

推荐的面包屑插件,可以隐藏“Home”链接 - 小码农CODE - 行之有效找到问题解决它

推荐的面包屑插件,可以隐藏“Home”链接

时间:2010-11-23 作者:zina

我正在使用Breadcrumb NavXT 插件在我的页面中,但现在我面临一个问题

我需要在一些页面中隐藏“主页”链接。我可以通过将它隐藏在CSS中或根本不创建它来做到这一点。在PHP中

如果我想使用CSS-我没有任何关于第一个链接及其“>>”分隔符的指示-它没有id或特殊类

如果我选择在这些情况下根本不创建它的PHP解决方案,我的问题是我无法向“bcn\\u display()”函数发送任何参数

我可以用我当前的插件来完成吗?或者有更好的插件?

谢谢

5 个回复
最合适的回答,由SO网友:hakre 整理而成

更新

Mtekk\'s answer 基本上就是我所建议的,不需要触摸插件本身,所以我的答案是理论性的。He describes how to do that easily.

我认为最简单的方法是破解插件并插入一个过滤器挂钩,因为你主要对插件有信心(说一些小的改变)。然后,您可以根据需要进行筛选。如果您共享代码,这可能会使其甚至成为原始插件,因此您可以受益于更新。

示例:

请参阅文件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;
 });
顺便说一句,插件的作者经常在这里,所以他可能对此也有一些反馈。

SO网友:mtekk

你想在什么样的页面上隐藏家庭面包屑?如果只是在主页上,请在通话中勾选is_front_page e、 g。if(!is_front_page){bcn_display();}

如果你根本不想要家里的面包屑,请确保“将家里的面包屑放在小路上”未在“设置”页面上选中。

如果您想有条件地删除家庭面包屑(老实说,这样做没有意义,但无论如何)。查看bcn\\u after\\u trail操作。它将传入当前的breadcrumb\\u trail对象,您可以弹出trail数组中的最后一个成员(主breadcrumb)。

例如:add_action(\'bcn_after_fill\', \'foo_pop\'); function foo_pop(&$trail) { if(is_page(\'foo\')) { array_pop($trail->trail); } }

这将从带有slug“foo”的页面的轨迹中删除主面包屑。

SO网友:Rarst

尝试Breadcrumb Trail, 我快速查看了源代码,它似乎接受了合适的论点\'show_home\' => __( \'Home\', $textdomain ),

SO网友:bueltge

您还可以在主题中使用自定义函数,以“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>\');
                        }
                }
        }
}
现在是一个没有家的例子

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

SO网友:zina

难以置信,但我还是自己找到了解决办法。。

也许是u给了我灵感-thanx:)

我决定向bcn\\u display()传递一个参数,以防我不想在跟踪中获得“home”链接。默认情况下,该参数设置为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);

}

相关推荐

Can I make plugins required?

我正在开发自己的Wordpress主题,将用于多个客户端。它有一个主题选项页面,这样我每次都可以轻松自定义网站,但我也会在我制作的每个网站上使用一些插件(如SEO插件、安全性等)。有没有办法让它们成为“必需的”,这样我就可以得到这些插件的列表,这样当我在新网站上安装主题时就不必在插件目录中找到它们了?