【问题标题】:Set a custom breadcrumb in WordPress / Genesis that is different from the post / page title在 WordPress / Genesis 中设置与帖子/页面标题不同的自定义面包屑
【发布时间】:2016-10-07 22:07:03
【问题描述】:

我的公司一直在为 WordPress / Genesis 构建开发我们自己的子主题,我们将其用作所有客户的标准。对于 SEO,我们有时会有较长的页面标题,在面包屑中看起来不太好。即“某城的砖头服务”。它最终看起来像这样:

Home / Brick Services In Sometown / Acme Bricks

我们想要做的是能够在页面/帖子编辑器上有一个字段,允许我们为面包屑输入自定义文本,所以它看起来像:

Home / Services / Acme Bricks

我知道如何将适当的元框添加到后端并将输入的信息添加到帖子/页面元中,但我看到使用面包屑的这些额外数据完成的唯一方法是编辑 Genesis 核心主题文件,我不想这样做。我想在子主题中完成此操作,因此更新并不麻烦。

如果我要编辑 Genesis 核心 breadcrumb.php 文件,我会执行以下操作:

$ub_breadcrumb = esc_html( get_post_meta( $post->ID, '_ub_breadcrumb', TRUE ) );
if ( !empty( $ub_breadcrumb )) {

//* Add the custom page title for breadcrumbs if value is set
$crumbs[] = $ub_breadcrumb;
} else {

//* Add the current page title
$crumbs[] = get_the_title( $post->ID );
}

这是来自第 363 行的 genesis/lib/classes/breadcrumb.php 核心文件。我也会对上面部分中当前页面/帖子的祖先做类似的事情。

还有其他方法可以在不编辑核心主题文件的情况下完成此操作吗?我们试图将这一切都保留在子主题中,因此它是更新证明(无论如何都可以)。

谢谢。这对 Google 来说是一件奇怪的事情,所以除了 Genesis 中的内置面包屑过滤器外,我没有找到任何东西,但这些过滤器不包括帖子/页面标题。

【问题讨论】:

标签: php wordpress genesis


【解决方案1】:

我已经有一段时间没有更新它了,但你可能想试试我的插件:

https://github.com/GaryJones/genesis-single-breadcrumbs

【讨论】:

  • 正是我需要的。如果其他人遇到这个问题,它在 WP 4.6.1 和 Genesis 2.4.1 中可以完美运行,即使插件显示 WP 3.6 和 Genesis 2.0
  • 感谢您的测试 - 我会更新 Tested Up To 值 :-)
【解决方案2】:

这是部分答案:在子主题(不是父主题)的 functions.php 文件中,您可以使用以下命令从面包屑中删除帖子标题:

function be_remove_title_from_single_crumb( $crumb, $args ) {
  return substr( $crumb, 0, strrpos( $crumb, $args['sep'] ) );
}
add_filter( 'genesis_single_crumb', 'be_remove_title_from_single_crumb', 10, 2 );

来自http://www.billerickson.net/code/remove-post-title-from-breadcrumb/

有了这个,我想你可以删除默认帖子标题,然后 - 在同一个函数中 - 从元框或该帖子的自定义字段中检查是否存在不同的帖子标题,我假设, post ID,如果存在则返回。

另请参阅http://rickrduncan.com/wordpress/customize-genesis-breadcrumb 以获取核心函数中所有默认参数的参考:

public function __construct() {
    //* Default arguments
    $this->args = array(
        'home'                    => __( 'Home', 'genesis' ),
        'sep'                     => __( ' <span aria-label="breadcrumb separator">/</span> ', 'genesis' ),
        'list_sep'                => ', ',
        'prefix'                  => sprintf( '<div %s>', genesis_attr( 'breadcrumb' ) ),
        'suffix'                  => '</div>',
        'heirarchial_attachments' => true,
        'heirarchial_categories'  => true,
        'labels' => array(
            'prefix'    => __( 'You are here: ', 'genesis' ),
            'author'    => __( 'Archives for ', 'genesis' ),
            'category'  => __( 'Archives for ', 'genesis' ),
            'tag'       => __( 'Archives for ', 'genesis' ),
            'date'      => __( 'Archives for ', 'genesis' ),
            'search'    => __( 'Search for ', 'genesis' ),
            'tax'       => __( 'Archives for ', 'genesis' ),
            'post_type' => __( 'Archives for ', 'genesis' ),
            '404'       => __( 'Not found: ', 'genesis' )
        )
    );
}

【讨论】:

  • 谢谢。我曾在 Bill Erickson 的网站上看到过该帖子,但在我看来,它正在选择一个包含直到分隔符的所有内容的子字符串,但我正在寻找一种可以处理具有多个父页面的面包屑的解决方案。即(家庭/服务/侧板/某些服务)都可能需要自定义面包屑,因为我们的 SEO 人员经常将本地化放在页面标题中,但这在面包屑中看起来并不好。
猜你喜欢
  • 1970-01-01
  • 2013-10-10
  • 2013-10-17
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多