如何修改核心 WordPress 管理菜单以通过 AJAX 加载?

问题描述 投票:0回答:1

我找不到任何插件可以做到这一点,也找不到任何有人问这个问题的线程,所以它要么非常困难,要么非常简单。

注意: 这不适用于管理页面内的 ajax 加载面板/选项卡菜单,这适用于整个 WP 后端管理菜单,无论速度和潜在问题如何。菜单项,例如:仪表板、页面、帖子、用户等

我问了 GPT3.5,这就是我得到的,有人可以确认这是否是正确的方法吗?

  1. 在您的主题或插件中排队 jQuery: 确保 jQuery 在您的主题或插件中排队。 WordPress 默认包含 jQuery,但如果需要,您可能需要显式检查和排队。

    phpCopy code
    

    function enqueue_custom_scripts() { wp_enqueue_script('jquery'); } add_action('wp_enqueue_scripts', 'enqueue_custom_scripts');

  2. 为您的 AJAX 功能创建一个 JavaScript 文件: 创建一个 JavaScript 文件(例如,

    custom-admin-ajax.js
    )并将其排入您的主题或插件中。该文件将包含您的 AJAX 逻辑。

    javascriptCopy code
    

    jQuery(document).ready(function($) { // AJAX request to load WordPress admin menu $.ajax({ url: ajaxurl, data: { action: 'load_admin_menu', }, success: function(response) { // Update the menu with the response $('#adminmenuwrap').html(response); } }); });

  3. 创建一个 PHP 函数来处理 AJAX 请求: 在主题的

    functions.php
    文件或自定义插件中,添加一个 PHP 函数来处理 AJAX 请求。

    phpCopy code
    

    function load_admin_menu_callback() { // Your code to generate the admin menu ob_start(); require_once ABSPATH . 'wp-admin/menu-header.php'; // Include WordPress menu header $menu = ob_get_clean(); // Send the generated menu as the AJAX response echo $menu; wp_die(); // Always include this to terminate the script properly } add_action('wp_ajax_load_admin_menu', 'load_admin_menu_callback');

    在此示例中,我们使用

    ob_start()
    来缓冲
    menu-header.php
    的输出,然后将其作为 AJAX 响应发送。

  4. 挂钩 JavaScript 文件并本地化 AJAX URL: 将 JavaScript 文件排队并在主题的

    functions.php
    或自定义插件中本地化 AJAX URL。

    phpCopy code
    

    function enqueue_custom_scripts() { wp_enqueue_script('custom-admin-ajax', get_template_directory_uri() . '/js/custom-admin-ajax.js', array('jquery'), null, true); wp_localize_script('custom-admin-ajax', 'ajaxurl', admin_url('admin-ajax.php')); } add_action('wp_enqueue_scripts', 'enqueue_custom_scripts');

    wp_localize_script
    函数用于将数据从 PHP 传递到 JavaScript。在本例中,我们将包含 URL 的
    ajaxurl
    变量传递给
    admin-ajax.php

现在,当页面加载时,它将通过操作

admin-ajax.php
触发对
load_admin_menu
的 AJAX 请求。服务器将响应生成的管理菜单,JavaScript 将更新页面上的菜单。

我试图找到一个可以为后端执行此操作的插件或主题,但 Menu Editor Pro 不会执行此操作,并且 Adminify 仅使用 ajax 加载子菜单项,但在单击时会重新加载页面。

javascript php ajax wordpress wordpress-theming
1个回答
0
投票

是的,应该可以,可能需要调整,但你需要运行它。

ob_start 函数允许您加载 PHP 文件,但不将其包含在任何输出中,因为它会被缓冲。

ob_end_clean 函数获取缓冲内容,以便该行将内容放入变量中。

您可能只想找到它通常在模板中加载的位置,然后将其注释掉/用您的响应替换它。

总体来说看起来不错。

© www.soinside.com 2019 - 2024. All rights reserved.