簡體   English   中英

如何使用 $wpdb->get_results() 在 WordPress 中按 menu_order 獲取帖子順序?

[英]How to get posts order by menu_order in WordPress using $wpdb->get_results()?

我有以下 function 在其中構建自己的父子導航。

我面臨的問題是我無法通過 menu_order 對子項進行排序(因此,通過重新排序時可以在每個頁面上設置的 Order 屬性進行排序)。 任何有關如何做到這一點的提示將不勝感激。

function wph_get_page_tree( $page_id ){
    global $wpdb;
    $tree_data = [];
    $tree_data[$page_id] = ['title' => get_post($page_id)->post_title, 'ID' => $page_id];


    // get 1 level childs
    $level_1_childs = [];
    $all_childs = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM  {$wpdb->posts} WHERE post_parent = %d && post_type= 'page' && post_status='publish' ", $page_id ) );
    foreach( $all_childs as $single_2_level ){

        $level_1_childs[$single_2_level->ID] = ['title' => $single_2_level->post_title, 'ID' => $single_2_level->ID];
        //$level_1_childs[$single_2_level->ID] = $single_2_level->post_title;
        $all_sub_childs = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM  {$wpdb->posts} WHERE post_parent = %d && post_type= 'page' && post_status='publish' ", $single_2_level->ID ) );

        $level_2_childs = [];
        foreach( $all_sub_childs as $single_3_level ){
            $level_2_childs[$single_3_level->ID] = ['title' => $single_3_level->post_title, 'ID' => $single_3_level->ID];
        }
        //var_dump( $level_1_childs );
        $level_1_childs[$single_2_level->ID]['childs'] = $level_2_childs;
        //var_dump( $level_1_childs );
    }
    $tree_data[$page_id]['childs'] = $level_1_childs;

    //var_dump( $tree_data );
    return $tree_data;
}

您需要將ORDER BY {$wpdb->posts}.menu_order ASC傳遞給您的查詢。 檢查下面的代碼。

function wph_get_page_tree( $page_id ){
    global $wpdb;
    $tree_data = [];
    $tree_data[$page_id] = ['title' => get_post($page_id)->post_title, 'ID' => $page_id];


    // get 1 level childs
    $level_1_childs = [];
    $all_childs = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM  {$wpdb->posts} WHERE post_parent = %d && post_type= 'page' && post_status='publish' ORDER BY {$wpdb->posts}.menu_order ASC ", $page_id ) );
    foreach( $all_childs as $single_2_level ){

        $level_1_childs[$single_2_level->ID] = ['title' => $single_2_level->post_title, 'ID' => $single_2_level->ID];
        //$level_1_childs[$single_2_level->ID] = $single_2_level->post_title;
        $all_sub_childs = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_title FROM  {$wpdb->posts} WHERE post_parent = %d && post_type= 'page' && post_status='publish' ORDER BY {$wpdb->posts}.menu_order ASC ", $single_2_level->ID ) );

        $level_2_childs = [];
        foreach( $all_sub_childs as $single_3_level ){
            $level_2_childs[$single_3_level->ID] = ['title' => $single_3_level->post_title, 'ID' => $single_3_level->ID];
        }
        //var_dump( $level_1_childs );
        $level_1_childs[$single_2_level->ID]['childs'] = $level_2_childs;
        //var_dump( $level_1_childs );
    }
    $tree_data[$page_id]['childs'] = $level_1_childs;

    //var_dump( $tree_data );
    return $tree_data;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM