php
  • wordpress
  • wp-nav-walker
  • 2017-09-18 1 views 1 likes 
    1

    표시 기능을 추가하려고합니다 : 기능의 보행자 메뉴에 아무 것도 표시하지 않지만 작동하지 않습니다. 이후 상태가 다음 "초안"입니다 기본적으로 경우보행자 메뉴의 게시 상태를 기반으로 표시 없음 추가

    ...

    내가 잘못 갔어요 어떤 아이디어?

      if (isset($item->classes[0]) && ! empty($item->classes[0])) { 
           $custom_class_data = ' data-classes="' . $item->classes[0] . '"'; 
          } 
    
          $class_names = $class_names ? ' class="' . esc_attr($class_names) . $class_columns . '"' : ''; 
    
          $style = $style ? ' style="' . esc_attr($style) . '"' : ''; 
    
          $id = apply_filters('nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args); 
          $id = $id ? ' id="' . esc_attr($id) . '"' : ''; 
          global $post; 
          $page_id = $post->ID;; // example id of your page 
          $page = get_page($page_id); 
          if($page->post_status == 'draft') : 
          $output .= '<li role="menuitem" style="display: none"' . $id . ' ' . $class_names . ' ' . $column_width . $custom_class_data . $style . ' >'; 
          else: 
          $output .= '<li role="menuitem" ' . $id . ' ' . $class_names . ' ' . $column_width . $custom_class_data . $style . ' >'; 
          endif; 
          $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); 
    
         } // End if(). 
    
    +0

    아래의 답변이 문제 해결에 도움이되는 경우 다른 사용자에게 도움이 될만한 답변이 있으니 도움을 받으십시오. 당신을 위해 일했으면 하나 받아 들여야하므로 사이트에서 해결 된 것으로 표시됩니다. [누군가 내 질문에 대답하면 어떻게해야합니까?] (https://stackoverflow.com/help/someone-answers) – FluffyKitten

    답변

    1

    당신은 이미 내가 그 같은 것을 할 것입니다, 스타일을 저장 $style 변수가 :

    // code... 
    if($page->post_status == 'draft') { 
        $style = 'display: none;'; 
        // if $style was previously initialized 
        // $style += 'display: none;'; 
    } 
    $style = $style ? ' style="' . esc_attr($style) . '"' : ''; 
    $output .= '<li role="menuitem"' . $id . ' ' . $class_names . ' ' . $column_width . $custom_class_data . $style . ' >'; 
    // rest of the code 
    
    +0

    그게 작동하지 않는 것 같습니다. 어쩌면 전체 파일을 볼 필요가 있습니다. URL은 다음과 같습니다. 전체 파일 : https://codeshare.io/anPrzV – Jane

    1

    당신은 상태를 확인하기 위해 global $post를 사용하고,하지만 그게, 그래서 현재 페이지를 참조 제대로 작동하지 않습니다.

    은 탐색 메뉴에서 메뉴 항목을 숨기기

    나는 이것이 start_el 기능에 가정, 당신이 확인할 수 있도록 전달 된 $item 변수는 메뉴에 추가 할 페이지/게시물의 세부 사항을 가지고 직접이 같은 상태가 :

    if($item->post_status == 'draft') 
    

    업데이트 된 코드는 다음과 같습니다

    if (isset($item->classes[0]) && ! empty($item->classes[0])) { 
        $custom_class_data = ' data-classes="' . $item->classes[0] . '"'; 
    } 
    
    $class_names = $class_names ? ' class="' . esc_attr($class_names) . $class_columns . '"' : ''; 
    
    $style = $style ? ' style="' . esc_attr($style) . '"' : ''; 
    
    $id = apply_filters('nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args); 
    $id = $id ? ' id="' . esc_attr($id) . '"' : ''; 
    
    if($item->post_status == 'draft') : 
        $output .= '<li role="menuitem" style="display: none"' . $id . ' ' . $class_names . ' ' . $column_width . $custom_class_data . $style . ' >'; 
    else: 
        $output .= '<li role="menuitem" ' . $id . ' ' . $class_names . ' ' . $column_width . $custom_class_data . $style . ' >'; 
    endif; 
    $output .= apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args); 
    


    대안 : 그들은 단지 페이지 초안을하는 것처럼 탐색에 모든 링크를 포함하지 마십시오

    당신은 전혀 포함되지 않아야 - display:none는 단지 그들이 여전히 HTML에 포함 된 디스플레이에서 숨 깁니다 따라서 HTML을 확인하면 URL을 쉽게 볼 수 있으며 Google은 여전히 ​​링크를 따라 가려고합니다.

    나는 귀하의 기능에서 첫 번째로 상태를 확인하고, 초안이 있다면 아무 것도하지 않고 돌아가는 것이 좋습니다. 그렇지 않으면 정상적으로 항목을 처리합니다.

    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { 
        // don't add page/post if it is draft 
        if($item->post_status == 'draft') return; 
    
        // if its not draft, process as normal 
        [...] 
    
    } 
    


    참고 : 다른 상태와 게시물

    초안 게시물이 정상적으로 때문에 포함되지 않습니다 난 당신이 게시물 표시/페이지를 얻기 위해 사용자 지정 코드를 사용하는 가정합니다. 이 경우 future, private 또는 trash의 게시물도 잊지 마세요.

    +0

    전체 파일을 게시 했으므로 그 방식으로 작동하지 않았습니다. 그것은 페이지 ID를 선택하지 않는 것 같습니다. – Jane

    +0

    다음은 전체 파일의 URL입니다. https://codeshare.io/anPrzV – Jane

    +0

    @Jane 코드 공유는 Avada 테마의 NavWalker 용입니다. 질문에 코드가 포함 된 함수는 어디에 있습니까? 우리에게 보여주지 않으면 코드를 고칠 수 없습니다! – FluffyKitten

    관련 문제