✨专业 WordPress 开发,定制建站,高效上线,合作即享优化服务!🚀

WordPress制作单页面菜单手动填写父页面 ID 自动获取其下所有子页面

//手动填写父页面 ID 自动获取其下所有子页面
//[page_navigation page_id="123"]
//其中 page_id="123" 是你手动填写的父页面的 ID。替换 "123" 为你实际的父页面 ID

function get_all_child_pages($parent_page_id) {
    // 查询当前页面下所有的子页面
    $args = array(
        'post_type'   => 'page',
        'post_parent' => $parent_page_id,
        'order'       => 'ASC',            // 排序方式
        'orderby'     => 'menu_order',     // 根据菜单排序
        'posts_per_page' => -1,            // 不限制数量
    );

    $query = new WP_Query($args);
    $child_pages = array();

    // 收集所有子页面
    while ($query->have_posts()) {
        $query->the_post();
        $child_pages[] = array(
            'ID'    => get_the_ID(),
            'title' => get_the_title(),
            'url'   => get_permalink(),
        );
        
        // 如果该页面有子页面,则递归获取子页面
        $child_pages = array_merge($child_pages, get_all_child_pages(get_the_ID()));
    }

    // 重置查询
    wp_reset_postdata();

    return $child_pages;
}

function custom_page_navigation_shortcode($atts) {
    // 解析简码参数,默认 page_id 为 0
    $atts = shortcode_atts(array(
        'page_id' => 0, // 通过简码传递的页面 ID
    ), $atts);

    $page_id = intval($atts['page_id']);
    if ($page_id <= 0) {
        return '<p>请提供有效的页面 ID。</p>';
    }

    // 获取父页面的信息
    $parent_page = get_post($page_id);
    if (!$parent_page) {
        return '<p>父页面不存在。</p>';
    }

    // 获取所有子页面
    $child_pages = get_all_child_pages($page_id);

    // 构建输出结果
    $output = '<ul class="page-navigation">';
    
    // 显示父页面
    $output .= '<li class="parent-page"><span class="arrow">→</span><a href="' . esc_url(get_permalink($parent_page)) . '">' . esc_html(get_the_title($parent_page)) . '</a></li>';
    
    // 显示子页面
    if (!empty($child_pages)) {
        foreach ($child_pages as $child) {
            // 检查当前页面是否为点击的链接
            $is_current_page = (get_the_ID() === $child['ID']);
            
            // 设置不同样式的链接
            if ($is_current_page) {
                $output .= '<li class="current-page"><span class="arrow">→</span><a href="' . esc_url($child['url']) . '">' . esc_html($child['title']) . '</a></li>';
            } else {
                $output .= '<li><span class="arrow">→</span><a href="' . esc_url($child['url']) . '">' . esc_html($child['title']) . '</a></li>';
            }
        }
    } else {
        $output .= '<li>該頁面沒有子頁面。</li>';
    }

    $output .= '</ul>';

    return $output;
}
add_shortcode('page_navigation', 'custom_page_navigation_shortcode');

使用说明:

  1. functions.php 或自定义插件中添加这段代码。

  2. 然后你可以在任何页面中使用以下简码

[page_navigation page_id="123"]

如果直接在模版里面PHP 函数调用方式,可以修改一下代码。

function get_all_child_pages($parent_page_id) {
    // 查询当前页面下所有的子页面
    $args = array(
        'post_type'   => 'page',
        'post_parent' => $parent_page_id,
        'order'       => 'ASC',            // 排序方式
        'orderby'     => 'menu_order',     // 根据菜单排序
        'posts_per_page' => -1,            // 不限制数量
    );

    $query = new WP_Query($args);
    $child_pages = array();

    // 收集所有子页面
    while ($query->have_posts()) {
        $query->the_post();
        $child_pages[] = array(
            'ID'    => get_the_ID(),
            'title' => get_the_title(),
            'url'   => get_permalink(),
        );
        
        // 如果该页面有子页面,则递归获取子页面
        $child_pages = array_merge($child_pages, get_all_child_pages(get_the_ID()));
    }

    // 重置查询
    wp_reset_postdata();

    return $child_pages;
}

function get_page_navigation($parent_page_id) {
    // 获取父页面的信息
    $parent_page = get_post($parent_page_id);
    if (!$parent_page) {
        return '<p>父页面不存在。</p>';
    }

    // 获取所有子页面
    $child_pages = get_all_child_pages($parent_page_id);

    // 构建输出结果
    $output = '<ul class="page-navigation">';
    
    // 显示父页面
    $output .= '<li class="parent-page"><span class="arrow">→</span><a href="' . esc_url(get_permalink($parent_page)) . '">' . esc_html(get_the_title($parent_page)) . '</a></li>';
    
    // 显示子页面
    if (!empty($child_pages)) {
        foreach ($child_pages as $child) {
            // 检查当前页面是否为点击的链接
            $is_current_page = (get_the_ID() === $child['ID']);
            
            // 设置不同样式的链接
            if ($is_current_page) {
                $output .= '<li class="current-page"><span class="arrow">→</span><a href="' . esc_url($child['url']) . '">' . esc_html($child['title']) . '</a></li>';
            } else {
                $output .= '<li><span class="arrow">→</span><a href="' . esc_url($child['url']) . '">' . esc_html($child['title']) . '</a></li>';
            }
        }
    } else {
        $output .= '<li>该页面没有子页面。</li>';
    }

    $output .= '</ul>';

    return $output;
}

如何在模板中调用:

在你的 WordPress 模板文件中,比如 page.phpsingle.php 或者自定义的模板文件,你可以通过以下方式直接调用 get_page_navigation 函数来显示导航:

<?php
// 传入父页面的 ID
$parent_page_id = 123; // 替换为你实际的父页面 ID

// 调用函数并输出页面导航
echo get_page_navigation($parent_page_id);
?>

 

WordPress 技术支持团队
WordPress 技术支持团队

💻 一位真诚且细致入微的年轻开发者🎓,专注于外贸网站定制开发领域。
🌟 专业承接 WordPress 建站设计定制与全方位开发服务。我们的独特优势在于,不仅精通网站开发技术,更将国际化主流美术设计元素🎨巧妙融合,同时制定精准有效的品牌营销策略📈。
💡 服务涵盖:
🔍WordPress 主题开发,打造独一无二的网站视觉风格与用户体验。
💻WordPress 网站定制,根据您的外贸业务需求,量身定制专属网站。
无论是网站架构搭建,还是界面美学设计,亦或是品牌推广策略,我们都能为您提供一站式的优质解决方案,助力您的外贸事业在互联网上脱颖而出,迈向全球市场🚀。

文章: 45

發表回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

提交您的请求

报价收集表

💥网站建设 | 实力说话,不搞虚的!

宝子们,咱就说,好多甲方都不乐意自己的网站被同行抄作业,这就跟你开个店,肯定不想让别人知道你的进货渠道是一个道理,对不?所以呢,为了给客户满满的安全感,咱网站上就没放任何客户案例作品的链接哈,这可是咱对客户隐私的保护。

📌但要是有真心想做网站的老板,或者宝子你只是想看看我们的案例,那就赶紧加我们网站的联系方式,咱麻溜地给你发几个瞅瞅,主打一个真诚!

要是你还没拿定主意要做啥风格的网站,也简单,你就找几个同行的网站发给我们,照着做就完事儿。咱选仿站可不代表没本事哈,只是咱实在受不了那种瞎扯犊子的无效沟通和繁琐到让人抓狂的流程。有些甲方做个企业展示型网站,非得找几十家供应商来卷,说实话,没真技术的公司才会在那跪舔甲方。咱不一样,咱就想踏踏实实地给客户做出性价比超高、让客户满意得直拍大腿的网站。那些跪舔的活儿,就让那些只会耍嘴皮子、没啥技术的公司去干吧,咱不伺候! #网站建设

#甲方乙方 #拒绝内卷

联系WordPress技术团队

我们期待您的来信。

提交您的请求

报价收集表