web-dev-qa-db-ja.com

カスタムクローラをフロントエンドのみに制限する

次のカスタムウォーカーを使用して、wp_get_nav_menu_itemsで作成した自分のnavmenuからログインページと登録ページを非表示にしています.....

function wpse31748_exclude_menu_items( $items, $menu, $args ) {

// Iterate over the items to search and destroy
if ( is_user_logged_in() ) {
$registerpage = get_page_by_title( 'Register' );
$loginpage = get_page_by_title( 'Login' );
    foreach ( $items as $key => $item ) {
    if ( $item->object_id == $registerpage->ID ){
    unset( $items[$key] );
    }
    elseif ( $item->object_id == $loginpage->ID ){
    unset( $items[$key] );
    }
    else{}
}
return $items;
} else {
return $items;
}
}
add_filter( 'wp_get_nav_menu_items', 'wpse31748_exclude_menu_items', null, 3 );

うまく機能しますが、ダッシュボード内のメニューページにも影響を与えます。クローラをフロントエンドのみに影響を与えるように制限する方法はありますか。

1
fightstarr20

あなたのコードが以下のようになるように!is_admin()を試すことができます。

function wpse31748_exclude_menu_items( $items, $menu, $args ) {
    // Iterate over the items to search and destroy
    if ( !is_admin() && is_user_logged_in() ) {
        $registerpage = get_page_by_title( 'Register' );
        $loginpage = get_page_by_title( 'Login' );
        foreach ( $items as $key => $item ) {
            if ( $item->object_id == $registerpage->ID ){
                unset( $items[$key] );
            }elseif ( $item->object_id == $loginpage->ID ){
                unset( $items[$key] );
            }
        }
    }
    return $items;
}
add_filter( 'wp_get_nav_menu_items', 'wpse31748_exclude_menu_items', null, 3 );
2
birgire