내 탐색의 모든 ID를 가져 와서 문자열로 변환 wp_query
하여 탐색에만 나열된 페이지를 가져올 때 사용할 수 있도록 노력하고 있습니다. ID를 얻는 코드 :
$menu_name = 'primary';
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] )) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
}
foreach ( $menu_items as $menu_item ) {
$numbers[] = $menu_item->ID;
}
$number = implode(',',$numbers);
그러나 잘못된 숫자를 반환합니다. 관리 영역으로 이동하여 페이지 위로 마우스를 가져 가면 화면 하단의 주소 표시 줄에 표시되는 숫자가 일치하지 않습니다. 내가 무엇을 잘못하고 있지?
답변
메뉴 항목은에 저장됩니다 posts
와 테이블 post_type
의 nav_menu_item
. 그래서, 당신이 돌려주는 것은 그것이 가리키는 것이 아니라 메뉴 항목 자체의 ID입니다.
메뉴 항목이 참조하는 페이지 / 포스트 ID가 메뉴 항목 및 = 와 일치하는 postmeta
표와 함께 표에 저장됩니다 . 메뉴 항목이 가리키는 페이지 를 얻는 가장 쉬운 방법 은 다음과 같은 것을 사용하는 것입니다.post_id
ID
meta_key
_menu_item_object_id
meta_value
$numbers[] = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
답변
이 변경 사항이 발생하면 알려 드릴 수 없지만 WordPress 버전 5.2.4 부터 페이지 ID를 사용 object
하고 object_id
검색 할 수 있습니다 . 이 작업을 수행하는 방법은 다음과 같습니다.
/**
* The `0` is added as a default case.
* In case our menu does not contain any pages this
* will prevent our query from returning all pages
*/
$page_ids = array( 0 );
$registered_menu = 'my_registered_menu';
$locations = get_nav_menu_locations();
if( ! empty( $locations ) && isset( $locations[ $registered_menu ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $registered_menu ] );
$menu_items = wp_get_nav_menu_items( $menu->term_id );
if( ! empty( $menu_items ) ) {
foreach( $menu_items as $item ) {
// Only grab page IDs
if( 'page' !== $item->object ) {
continue;
}
$page_ids[] = $item->object_id;
}
}
}
$page_query = new WP_Query( array(
'post_type' => 'page',
'post_status' => 'publish',
'no_found_rows' => true,
'post__in' => $page_ids,
'posts_per_page'=> 100, // Large upper limit
) );