2016-07-01 2 views
0

내 고객은 "Galleries"라는 페이지가있는 Wordpress 블로그를 가지고 있습니다.이 페이지는 로컬 페이지와 외부 페이지의 링크를 수동으로 작성하므로 일종의 기본 페이지 역할을합니다.Wordpress에서 다른 페이지의 상위 페이지 강제 설정

블로그의 기본 메뉴에는이 갤러리 페이지에 대한 링크가 있습니다. 문제는 이전에 갤러리를 부모 페이지로 선택하지 않는 한 메뉴 항목이 해당 페이지에만 활성화되어 있고 링크 된 로컬 페이지에는 활성화되어 있지 않다는 것입니다.

그래서 메뉴를 렌더링하기 전에 특정 조건을 만족하는 페이지로 가상적으로 조상을 강제로 넣을 수 있는지 궁금 해서요. 모든 페이지를 수동으로 편집하고 하위 페이지로 만들 필요가 없습니다. "갤러리"

답변

0

마지막으로 발견을 수행하는 방법 :

$main_gallery_page= get_page_by_title('Galleries'); 

add_filter('nav_menu_css_class' , 'force_ancestor_nav_class' , 10 , 2); 

function force_ancestor_nav_class($classes, $item){ 
    global $main_gallery_page,$post; 

    //condition: could be any condition: by category, title, contents, ... 
    $make_ancestor=substr($post->post_title, 0, 7) === "Gallery"; 

    //only adds the class if the condition is met and not already present 
    if ($item->object_id==$main_gallery_page->ID && $make_ancestor && !in_array('current-page-ancestor',$classes)) {$classes[]='current-page-ancestor';} 

    return $classes; 
} 
1

메뉴 데이터를 조합하는 초기 단계에서 작동하는 필터를 찾아야합니다. 이미 빌드가 완료되면 중재 배열을 저글링해야합니다.

  1. 업데이트 간단한 데이터베이스 쿼리를 통해 현재의 모든 기존 페이지의 부모 : 내가 다른 접근 방식을 제안 것

    . wp_posts에는 열 post_parent이 포함되어 있습니다. 따라서 언급 한 기준을 충족하는 모든 페이지를 걸러내는 쿼리를 작성하십시오 (기준이 무엇인지에 따라 쉽거나 어렵습니다. wp_postmeta, wp_terms와 같은 다른 테이블과의 JOIN이 관련 될 수 있습니다) 그런 다음 부모를 업데이트하십시오. 이것은 일회성 일이므로 phpMyAdmin 또는 이와 유사한 데이터베이스 프론트 엔드를 통해 수행 할 수 있습니다. "페이지"는 내부적으로 일반 게시물이며 동일한 테이블에 저장되므로 처음부터 페이지 인 게시물 만 필터링해야합니다.

  2. 게시물 저장/업데이트 작업에 연결하여 조건이 일치하는지 다시 확인하고, PHP 데이터 구조의 해당 시점에 게시물의 부모 페이지를 설정 한 경우 가져 오기 전에 데이터베이스에 기록됩니다.

관련 문제