web-dev-qa-db-ja.com

カスタムメニュー使用時に親ページのIDを取得する。

カスタムメニューを使ってwp_nav_menu()を使ってメニューを表示します。 pagesで親ページとして設定せずに、メニューで親のthe_content()を取得したいのですが。 (PHPで)親IDを取得する方法はありますか。私はwp_nav_menuが親アイテムに特別なクラス名を与えているのを見ることができるので、私は私がそのアイテムidを検索することができて、そしてページがロードされる前にそれで何かをすることができると思います。これは可能ですか?

ありがとうございます。

1
Malibur

これが十分に堅牢であるかどうかはわかりませんが、最初に現在の投稿を探し、次にその親のメニューを探すための基本的なメニューのトラバースを示しています。

/**
 * @param mixed $menu
 * @param int   $post_id
 *
 * @return WP_Post|bool
 */
function get_menu_parent( $menu, $post_id = null ) {

    $post_id        = $post_id ? : get_the_ID();
    $menu_items     = wp_get_nav_menu_items( $menu );
    $parent_item_id = wp_filter_object_list( $menu_items, array( 'object_id' => $post_id ), 'and', 'menu_item_parent' );

    if ( ! empty( $parent_item_id ) ) {
        $parent_item_id = array_shift( $parent_item_id );
        $parent_post_id = wp_filter_object_list( $menu_items, array( 'ID' => $parent_item_id ), 'and', 'object_id' );

        if ( ! empty( $parent_post_id ) ) {
            $parent_post_id = array_shift( $parent_post_id );

            return get_post( $parent_post_id );
        }
    }

    return false;
}
1
Rarst