WordPress:将页面添加到 Yoast SEO 面包屑
WordPress: Add page to Yoast SEO breadcrumbs
我想在我网站的面包屑路径中添加一个额外的页面。
问题是,我使用的是 WooCommerce,但面包屑导航在我的帐户仪表板上无法正常工作。它总是显示以下踪迹:
Home > My account
即使我在像 "edit account" 这样的子页面上。
这些子页面并不是真正的页面。它们是同一页面上的 WooCommerce 端点。
它应该是这样的:
Home > My account > Orders > Order ID
我尝试添加一个页面,但无法弄清楚。
要从面包屑路径中删除页面,我使用以下代码:
/**
* Conditionally Override Yoast SEO Breadcrumb Trail
* http://plugins.svn.wordpress.org/wordpress-seo/trunk/frontend/class-breadcrumbs.php
* -----------------------------------------------------------------------------------
*/
add_filter( 'wpseo_breadcrumb_links', 'wpse_100012_override_yoast_breadcrumb_trail' );
function wpse_100012_override_yoast_breadcrumb_trail( $links ) {
global $post;
if ( is_home() || is_singular( 'post' ) || is_archive() ) {
$breadcrumb[] = array(
'url' => get_permalink( get_option( 'page_for_posts' ) ),
'text' => 'Blog',
);
array_splice( $links, 1, -2, $breadcrumb );
}
return $links;
}
代码来自这里:https://wordpress.stackexchange.com/a/121618/96806
我已经更改它以检查我是否在 WooCommerce 端点上。
这段代码工作正常。
但是如何更改它以添加页面而不是删除它?
我想这与 array_splice
;-)
有关
好的,我有办法
非常感谢@WebElaine 的回答:https://wordpress.stackexchange.com/a/332300/96806
这是我在 WooCommerce 我的帐户区域中更改 Yoast 面包屑导航的完整代码:
add_filter('wpseo_breadcrumb_links', 'woocommerce_account_breadcrumb_trail');
function woocommerce_account_breadcrumb_trail($links) {
if ( is_wc_endpoint_url() or is_account_page() ) {
$endpoint = WC()->query->get_current_endpoint();
$endpoint_title = WC()->query->get_endpoint_title( $endpoint );
$endpoint_url = wc_get_endpoint_url($endpoint);
if ( is_account_page() && !is_wc_endpoint_url() ) :
//$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'edit-account' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'orders' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'view-order' ) ) :
$endpoint_orders = 'orders';
$endpoint_orders_title = WC()->query->get_endpoint_title( $endpoint_orders );
$endpoint_orders_url = wc_get_endpoint_url($endpoint_orders);
$links[2] = array('text' => $endpoint_orders_title, 'url' => $endpoint_orders_url, 'allow_html' => 1);
$links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'edit-address' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'payment-methods' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'add-payment-method' ) ) :
$endpoint_payment_methods = 'payment-methods';
$endpoint_payment_methods_title = WC()->query->get_endpoint_title( $endpoint_payment_methods );
$endpoint_payment_methods_url = wc_get_endpoint_url($endpoint_payment_methods);
$links[2] = array('text' => $endpoint_payment_methods_title, 'url' => $endpoint_payment_methods_url, 'allow_html' => 1);
$links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
endif;
}
return $links;
}
我对每一个反馈都很满意。
我想在我网站的面包屑路径中添加一个额外的页面。 问题是,我使用的是 WooCommerce,但面包屑导航在我的帐户仪表板上无法正常工作。它总是显示以下踪迹:
Home > My account
即使我在像 "edit account" 这样的子页面上。 这些子页面并不是真正的页面。它们是同一页面上的 WooCommerce 端点。
它应该是这样的:
Home > My account > Orders > Order ID
我尝试添加一个页面,但无法弄清楚。 要从面包屑路径中删除页面,我使用以下代码:
/**
* Conditionally Override Yoast SEO Breadcrumb Trail
* http://plugins.svn.wordpress.org/wordpress-seo/trunk/frontend/class-breadcrumbs.php
* -----------------------------------------------------------------------------------
*/
add_filter( 'wpseo_breadcrumb_links', 'wpse_100012_override_yoast_breadcrumb_trail' );
function wpse_100012_override_yoast_breadcrumb_trail( $links ) {
global $post;
if ( is_home() || is_singular( 'post' ) || is_archive() ) {
$breadcrumb[] = array(
'url' => get_permalink( get_option( 'page_for_posts' ) ),
'text' => 'Blog',
);
array_splice( $links, 1, -2, $breadcrumb );
}
return $links;
}
代码来自这里:https://wordpress.stackexchange.com/a/121618/96806 我已经更改它以检查我是否在 WooCommerce 端点上。
这段代码工作正常。 但是如何更改它以添加页面而不是删除它?
我想这与 array_splice
;-)
好的,我有办法
非常感谢@WebElaine 的回答:https://wordpress.stackexchange.com/a/332300/96806
这是我在 WooCommerce 我的帐户区域中更改 Yoast 面包屑导航的完整代码:
add_filter('wpseo_breadcrumb_links', 'woocommerce_account_breadcrumb_trail');
function woocommerce_account_breadcrumb_trail($links) {
if ( is_wc_endpoint_url() or is_account_page() ) {
$endpoint = WC()->query->get_current_endpoint();
$endpoint_title = WC()->query->get_endpoint_title( $endpoint );
$endpoint_url = wc_get_endpoint_url($endpoint);
if ( is_account_page() && !is_wc_endpoint_url() ) :
//$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'edit-account' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'orders' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'view-order' ) ) :
$endpoint_orders = 'orders';
$endpoint_orders_title = WC()->query->get_endpoint_title( $endpoint_orders );
$endpoint_orders_url = wc_get_endpoint_url($endpoint_orders);
$links[2] = array('text' => $endpoint_orders_title, 'url' => $endpoint_orders_url, 'allow_html' => 1);
$links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'edit-address' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'payment-methods' ) ) :
$links[2] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
elseif ( is_wc_endpoint_url( 'add-payment-method' ) ) :
$endpoint_payment_methods = 'payment-methods';
$endpoint_payment_methods_title = WC()->query->get_endpoint_title( $endpoint_payment_methods );
$endpoint_payment_methods_url = wc_get_endpoint_url($endpoint_payment_methods);
$links[2] = array('text' => $endpoint_payment_methods_title, 'url' => $endpoint_payment_methods_url, 'allow_html' => 1);
$links[3] = array('text' => $endpoint_title, 'url' => $endpoint_url, 'allow_html' => 1);
endif;
}
return $links;
}
我对每一个反馈都很满意。