wp_nav_menu에서 UL을 어떻게 제거합니까?


18

이 사이트를 검색 하여이 질문에 대한 많은 답변 을 찾았습니다 . 그들 대부분은 내 주제를 다루지 않습니다.

여기 내가 찾은 하나의 솔루션이 있으며 필요에 따라 작동합니다.

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

이 코드는 ul의 시작과 끝에서 제거 됩니다 wp_nav_menu(). 그래서 내 테마에서 나는 단지 쓴다.

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

그러나 관리자를 통해 메뉴를 추가하거나 활성화하지 않으면 문제가 다시 발생합니다. http://domain.com/wp-admin/nav-menus.php

질문 :

<div><ul>**</ul></div>메뉴의 활성화 여부를 어떻게 제거합니까? 알려주세요


마침내 나는 그것이 효과가 있었다 :) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

어쨌든 UL을 다시 추가 할 때 왜 UL을 제거 하시겠습니까? menu_classmenu_id매개 변수를 사용 하여 UL에서 클래스 및 / 또는 id 속성을 설정할 수 있습니다 .

슈퍼 피쉬를 사용하고 싶습니다. menu_classmenu_id메뉴가 활성화 된 경우에만 작동합니다. 메뉴가 않는 경우하지 존재 menu_classmenu_id같이하지 않습니다 <ul>하지만 같은 <div>. 그래서 wp_nav_menu()당신 에 대해 너무 많은 질문은 그것을 테스트 할 수 있습니다 :)
haha

답변:


11

wp_nav_menu 함수는 메뉴가 존재하지 않을 경우 실행할 함수의 이름 인 fallback_cb의 인수를 사용합니다. 따라서 코드를 다음과 같이 변경하십시오.

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

메뉴에서 컨테이너를 제거하고 wp_nav_menu 함수에 전송 된 추가 인수로 다른 작업을 수행 할 수도 있습니다

도움이 되었기를 바랍니다.


@ בניית אתרים-설명해 주셔서 감사합니다. 그러나 나는 여기에 흐려지고있다. 에 메모에 따르면 nav-menu-template.php fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallback내가 뭘하기 위해 교체해야합니다 wp_nav_menu_no_ul()내가 거짓으로 설정하면 작업 fallback_cb? 지금은 공백으로 반환되기 때문입니다.
haha

이제 이해 :) 감사합니다 많은 בניית אתרים. BTW, 닉네임을 어떻게 발음합니까? 광산ha ha
haha

LOL, 다행 이네
Bainternet

나는 똑같은 것을 궁금해했다. 그것이 히브리어라고 생각한다. 호기심에서 정확한 번역이 무엇인지 .. :)
t31os

:) 그렇습니다. 히브리어와 그 닉네임은 제대로 번역하면 "웹 디자인"과 같은 것을 의미하는 한 걸음 나왔습니다.
Bainternet

57

실제로 WordPress는 기본적으로 이것을 지원합니다.

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

의 기본값은 items_wrap입니다 <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.


3
이것이 정답입니다. <ul>이미 추가 된 후에 제거하기 위해 프로그래밍 방식으로 찾기 및 바꾸기를 수행하는 다른 대답은 뒤로입니다
mikemike

'container' => false포장 <div>을 제거하고 싶다면 .
George Dimitriadis

기본적으로 WordPress에서 구성 할 수 있습니다. 감사!
Abdalla Arbab

가장 좋은 대답, 해킹이 필요 없음
Eman

이것은 wp 5.2에서 나를 위해 작동하지 않습니다
rafaelphp


4

<a>태그 만 인쇄 하려면 다음과 같이하십시오.

$primaryMenu = array(
    'theme_location'  => 'primary',
    'menu'            => '',
    'container'       => '',
    'container_class' => false,
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => 'primary-menu',
    'echo'            => false,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'depth'           => 0,
    'walker'          => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );

설정 나를 위해이 작품의 완벽한 만`items_wrap '=>'% 3 $ s '이 (가)`WP 5.2에서 효과가 없습니다
rafaelphp

2

나를 위해 일한 것은 다음과 같습니다.

<?php wp_nav_menu( array(
       'container' => '',
       'items_wrap' => '%3$s' 
) ); ?>

도움이 되길 바랍니다.


0

나는이 답변 이이 질문에 대한 것이 아니라는 것을 알고 있지만 WordPress에서 ul 및 li 태그를 제거하고 WordPress에 다른 태그를 추가하는 방법을 알고 많은 사람들이 있습니다.

내 코드를 적용하기 전에 WordPress는 메뉴에서 이러한 유형의 출력을 제공합니다.

<ul class="*****"><li>abc</li></ul>

그러나 누군가가 ul을 div로 바꾸고 li을 태그로 바꾸고 싶다면 아래 코드를 사용해야합니다

            <?php

                $menuParameters = array(
                    'menu' => 'primary_menu',
                    'link_before'     => '<span>',
                    'link_after'      => '</span>',
                    'before'        => '<div class="tp-primary-header mui-top-home">',
                    'after'     => '</div>',
                    'container'       => false,
                    'echo'            => false,
                    'depth'           => 0,
                );

                echo strip_tags(wp_nav_menu( $menuParameters ), '<a><span><div>' );
                ?>

이것은 다음 형식으로 출력을 제공합니다

<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.