在“Home”crumb之后添加自定义链接到WooCommerce breadcrumbs(例如Home> custom link> category> single product)

时间:2017-08-30 21:13:19

标签: php wordpress function woocommerce hook

信息:
1.使用Wordpress和WooCommerce,以及Genesis主题(+ Genesis Connect for WooCommerce插件)
2.商店存档页面为Excel Data Table
3.为所有页面激活面包屑(例如商店,类别/存档和单个产品页面)
4.“产品”(固定链接:BARRAY=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}) PARAMS=$(ifconfig wlan0 | grep netmask | awk '{print $2" "$4}') IP_ADDRESS=${PARAMS%% *} IP_ADDRESS=${IP_ADDRESS//./ } BINARY_IP_ADDRESS=$(for octet in $IP_ADDRESS; do echo -n ${BARRAY[octet]}" "; done) BIN_IP_SEP1=${BINARY_IP_ADDRESS//1/1 } BINARY_IP_ARRAY=( ${BIN_IP_SEP1//0/0 } ) NETMASK=${PARAMS#* } NETMASK=${NETMASK//./ } BINARY_NETMASK=$( for octet in $NETMASK do echo -n ${BARRAY[octet]}" " done ) BIN_MASK_SEP1=${BINARY_NETMASK//1/1 } BINARY_MASK_ARRAY=( ${BIN_MASK_SEP1//0/0 } ) # Count bits in MASK ARRAY BITS_COUNT=0 for i in ${BINARY_MASK_ARRAY[@]} do [ "$i" == "1" ] && BITS_COUNT=$((BITS_COUNT + 1)) done # Count address NEW_ADDRESS="" for i in {0..31} do [ $(($i % 8)) -ne 0 ] || NEW_ADDRESS+=" " if [ "${BINARY_MASK_ARRAY[$i]}" == "1" ] then NEW_ADDRESS+="${BINARY_IP_ARRAY[$i]}" else NEW_ADDRESS+="${BINARY_MASK_ARRAY[$i]}" fi done # Convert binary to decimal DECIMAL_ADDRESS=`echo $(for octet in $NEW_ADDRESS; do echo $((2#$octet)); done)` DECIMAL_ADDRESS=${DECIMAL_ADDRESS// /.} # Final result echo $DECIMAL_ADDRESS/$BITS_COUNT )是一个单独的Wordpress页面(不是类别)

尝试实现以下面包屑条件:
1.在“Home”crumb之后添加“Products”crumb(名称:/Shop,链接:/Products)(例如Home> Products> Category> Single Product)
2.如果在商店页面内(例如Home> Shop)

,请勿显示“产品”碎屑

我使用以下代码获得了正常运行的结果:

Products

问题是:有更好的方法吗?我的解决方案对我来说有点“hacky”,我想知道我是否会忽略一个明显的&更聪明的方式来实现我想要的结果。

2 个答案:

答案 0 :(得分:0)

有一个简短的方法。

 add_filter( 'woocommerce_get_breadcrumb', 'remove_shop_crumb', 20, 2 );
function remove_shop_crumb( $crumbs, $breadcrumb ){
    foreach( $crumbs as $key => $crumb ){
        if( $crumb[0] === __('Home') ) {

            array_push($crumbs," /customlink/ ");
       }
    }

    return $crumbs;
}

我还没有机会进行测试,因此您可能需要使用$ crumbs [0]来找到正确的位置,并且不确定是否需要在链接周围使用正斜杠。

答案 1 :(得分:0)

要在回家后添加自定义链接,我们可以使用array_splice函数

add_filter('woocommerce_get_breadcrumb', 'custom_breadcrumb', 20, 2);
function custom_breadcrumb($crumbs, $breadcrumb)
{
    if (!empty($crumbs)) {
        array_splice($crumbs, 1, 0, array(array(
            'Custom Link',
            'http://localhost/mysite/custom-link/'
        )));
    }

    return $crumbs;
}

这是变量$crumbs

的结构
array(2)
0:array(2)
    0:"Home"
    1:"http://localhost/mysite"
1:array(2)
    0:"Shop"
    1:"http://localhost/mysite/shop/"

这就是为什么我两次使用array,所以结果如下所示的原因

array(3)
0:array(2)
    0:"Home"
    1:"http://localhost/mysite"
1:array(2)
    0:"Custom Link"
    1:"http://localhost/mysite/custom-link/"
2:array(2)
    0:"Shop"
    1:"http://localhost/mysite/shop/"