第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    本節重點:在 WordPress 中將 PHP 準備好的數據傳給 JS 文件,并在 JS 中將傳來的值打印瀏覽器控制臺中

    書接上回,我們使用 Vue3 技術撰寫前端,為了與后臺進行交互,包括從前端加載的開始獲取初始設置數據等,都需要從 PHP 中獲取數據,但我們開發的項目打包后,只有 JS 文件,因此,開發的第一件事就是解決 PHP 傳值給 JS 的問題。

    為了方便我們的功能實現,我們開發一個簡單的插件。簡單介紹下軟件環境,都是三平臺通用的,大家能都用

    目標

    通過 PHP,將所需數據傳給 JS 文件,并在 JS 文件中打印出來。

    準備環境

    VS Code 下載后安裝使用即可。
    Local 下載安裝后,可點擊左下角“+”按鈕,一路默認選擇,填寫站點名稱即可.
    創建后,如下所示,

    第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    左側列表選擇自己創建的站點,

    • 點擊 Go to site folder 進入站點文件夾,選擇 app → public 即可看到站點根目錄文件
    • 點擊 WP Admin 即可進入站點后臺

    我們先在 WordPress 站點的wp-content/plugins目錄下新建文件夾 vue-spa ,我們在這里撰寫代碼,實現我們的功能。

    準備插件信息并啟用

    現在,我們在 vue-spa 文件夾下添加新文件“vue-spa.php”文件,寫入以下內容

    //vue-spa.php
    <?php
    /*
    Plugin Name: Vue - SPA 
    Plugin URI: http://www.kartiktrivedi.com
    Description: 將vue構建的頁面嵌入WordPress 中并產生交互
    Author: Muze
    Author URI: http://www.kartiktrivedi.com
    Version: 1.0.0
    */

    分別代表:

    • 插件名
    • 插件介紹網址
    • 插件功能介紹
    • 插件作者
    • 插件作者介紹網站
    • 插件版本

    現在,我們的插件準備好了,點擊 WP Admin 即可進入站點后臺,進入插件頁面,選擇 Vue - SPA 插件啟用吧

    第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    準備菜單

    為了驗證我們準備的數據,需要一個地方來展示,方便驗證,就做個菜單出來。承接上文,添加以下代碼

    //創建一個菜單
    function vuespa_create_menu_page()
    {
        add_menu_page(
            'VueSpa選項',                   // 此菜單對應頁面上顯示的標題
            'VueSpa',                      // 要為此實際菜單項顯示的文本
            'administrator',               // 哪種類型的用戶可以看到此菜單
            'vuespa_id',                   //  此菜單項的唯一ID(即段塞)
            'vuespa_menu_page_display',    // 呈現此頁面的菜單時要調用的函數的名稱
            'dashicons-admin-customizer',  //圖標 - 默認圖標
            '500.1',                       //位置
        );
    } // end vuespa_create_menu_page 
    add_action('admin_menu', 'vuespa_create_menu_page');
    //菜單回調 - 展示的內容
    
    function vuespa_menu_page_display()
    {
    ?>
        <!--在默認WordPress“包裝”容器中創建標題-->
        <div class="wrap">
            <!--標題-->
            <h2><?php echo esc_html(get_admin_page_title()); ?></h2>
            <!--提供Vue掛載點-->
            <div id="vuespa">此內容將在掛載Vue后被替換</div>
        </div>
    <?php
    
    } // vuespa_menu_page_display

    代碼的用途我放注釋了,大家可以看看,主要作用是,在 WordPress 后臺創建一個菜單,并展示一段話。

    • 其中的 class 樣式class="wrap"是 WordPress 自帶的,有利于頁面的一致性。
    • 其中的圖標,可在本節的開始提供的網址中獲取,是 WordPress 的自帶圖標

    現在,我們刷新 WordPress 后臺,可以找到 VueSpa 菜單,點擊打開即可。

    若沒有此菜單,請檢查是否啟用了 Vue - SPA 插件

    第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    準備JS文件接收數據

    為了確定 PHP 傳給 JS 的數據是成功的,我們需要在 JS 文件中進行驗證。

    我們在插件文件夾下新建文件夾 vite 和 dist 文件夾,并新建 index.js 和index.css 文件,結構類似這樣

    vue-spa/vite/dist/index.js
    vue-spa/vite/dist/index.css

    index.js 寫入以下代碼

    //vite/dist/index.js
    alert("我加載啦 - Npcink")

    index.css 暫時不寫

    現在,我們需要在 vue-spa.php 文件中載入 index.js 文件,我們在 vue-spa.php 文件中添加以下代碼

    //載入所需 JS 和 CSS 資源
    function vuespa_load_vues($hook)
    {
        //判斷當前頁面是否是指定頁面,是則繼續加載
        if ('toplevel_page_vuespa_id' != $hook) {
            return;
        }
        //版本號
        $ver = '52';
        //加載到頁面頂部
        wp_enqueue_style('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.css', array(), $ver, false);
        wp_enqueue_script('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.js', array(), $ver, false);
    
    }
    //樣式加載到后臺
    add_action('admin_enqueue_scripts', 'vuespa_load_vues');

    現在,我們只有打開 VueSpa 菜單才會有彈窗。此時,我們就加載了 JS 文件。

    準備數據

    我們通過PHP準備數據,在JS文件中通過彈窗顯示出來。

    我們在 vue-spa.php 頁面底部添加以下代碼準備數據

    //準備待傳輸的數據
    function vuespa_data()
    {
        $person = [
            "str" => "Hello, world!",
            "num" => 25,
            "city" => [1, 2, 3, 4, 5],
        ];
        return $person;
    }

    為了看到數據是否做好,我們修改下菜單回調函數 vuespa_menu_page_display() ,先用PHP將數據展示看看

    //菜單回調 - 展示的內容
    function vuespa_menu_page_display()
    {
    ?>
        <!--在默認WordPress“包裝”容器中創建標題-->
        <div class="wrap">
            <!--標題-->
            <h2><?php echo esc_html(get_admin_page_title()); ?></h2>
            <!--提供Vue掛載點-->
            <div id="vuespa">此內容將在掛載Vue后被替換</div>
        </div>
    <?php
    
    //展示準備的數據
        echo "<pre>";
        print_r(vuespa_data());
        echo "</pre>";
    } // vuespa_menu_page_display

    效果如下:

    第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    數據展示正常,

    傳遞數據

    傳遞數據,我們要用到 wp_localize_script()函數,修改我們載入JS的函數 vuespa_load_vues()

    //載入所需 JS 和 CSS 資源 并傳遞數據
    function vuespa_load_vues($hook)
    {
        //判斷當前頁面是否是指定頁面,是則繼續加載
        if ('toplevel_page_vuespa_id' != $hook) {
            return;
        }
        //版本號
        $ver = '52';
        //加載到頁面頂部
        wp_enqueue_style('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.css', array(), $ver, false);
        wp_enqueue_script('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.js', array(), $ver, false);
    
        $pf_api_translation_array = array(
            'route' => esc_url_raw(rest_url()),     //路由
            'nonce' => wp_create_nonce('wp_rest'), //驗證標記
            'data' => vuespa_data(),               //自定義數據
        );
        wp_localize_script('vite', 'dataLocal', $pf_api_translation_array); //傳給vite項目
    }
    //樣式加載到后臺
    add_action('admin_enqueue_scripts', 'vuespa_load_vues');

    再修改我們的 index.js 文件,將拿到的數據打印出來

    //vite/dist/index.js
    console.table(dataLocal);

    在WordPress 中,點擊VueSpa菜單,使用瀏覽器的開發者工具,即可在控制臺中看到傳遞的數據

    第一節:Vue3 開發WordPress設置選項 - PHP傳數據給JS

    其中,各個數據的用途可見注釋

        'route' => esc_url_raw(rest_url()),     //路由
        'nonce' => wp_create_nonce('wp_rest'), //驗證標記
        'data' => vuespa_data(),               //自定義數據
       nonce: "82711b7680"
       route: "http://localhost:10004/wp-json/"
    • 我們通過傳來的路由,知道要發出 POST 請求的網址
    • 我們通過傳來的驗證標記,在發出 POST 請求時進行身份驗證
    • 我們通過傳來的data數據,在 JS 文件中進行進一步的操作

    補充

    vue-spa.php 本節完整代碼

    <?php
    /*
    Plugin Name: Vue - SPA 
    Plugin URI: http://www.kartiktrivedi.com
    Description: 將vue構建的頁面嵌入WordPress 中并產生交互
    Author: Muze
    Author URI: http://www.kartiktrivedi.com
    Version: 1.0.0
    */
    
    
    //創建一個菜單
    function vuespa_create_menu_page()
    {
        add_menu_page(
            'VueSpa選項',                   // 此菜單對應頁面上顯示的標題
            'VueSpa',                      // 要為此實際菜單項顯示的文本
            'administrator',               // 哪種類型的用戶可以看到此菜單
            'vuespa_id',                   //  此菜單項的唯一ID(即段塞)
            'vuespa_menu_page_display',    // 呈現此頁面的菜單時要調用的函數的名稱
            'dashicons-admin-customizer',  //圖標 - 默認圖標
            '500.1',                       //位置
        );
    } // end vuespa_create_menu_page 
    add_action('admin_menu', 'vuespa_create_menu_page');
    
    //菜單回調 - 展示的內容
    function vuespa_menu_page_display()
    {
    ?>
        <!--在默認WordPress“包裝”容器中創建標題-->
        <div class="wrap">
            <!--標題-->
            <h2><?php echo esc_html(get_admin_page_title()); ?></h2>
            <!--提供Vue掛載點-->
            <div id="vuespa">此內容將在掛載Vue后被替換</div>
        </div>
    <?php
    
        //展示準備的數據
        echo "<pre>";
        print_r(vuespa_data());
        echo "</pre>";
    } // vuespa_menu_page_display
    
    
    
    //載入所需 JS 和 CSS 資源 并傳遞數據
    function vuespa_load_vues($hook)
    {
        //判斷當前頁面是否是指定頁面,是則繼續加載
        if ('toplevel_page_vuespa_id' != $hook) {
            return;
        }
        //版本號
        $ver = '52';
        //加載到頁面頂部
        wp_enqueue_style('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.css', array(), $ver, false);
        wp_enqueue_script('vite', plugin_dir_url(__FILE__) . 'vite/dist/index.js', array(), $ver, false);
    
        $pf_api_translation_array = array(
            'route' => esc_url_raw(rest_url()),     //路由
            'nonce' => wp_create_nonce('wp_rest'), //驗證標記
            'data' => vuespa_data(),               //自定義數據
        );
        wp_localize_script('vite', 'dataLocal', $pf_api_translation_array); //傳給vite項目
    }
    //樣式加載到后臺
    add_action('admin_enqueue_scripts', 'vuespa_load_vues');
    
    
    //準備待傳輸的數據
    function vuespa_data()
    {
        $person = [
            "str" => "Hello, world! - Npcink",
            "num" => 25,
            "city" => [1, 2, 3, 4, 5],
        ];
        return $person;
    }

    獲取hook變量

    若您想知道當前頁面的hook變量,可在 vue-spa.php 頁面底部添加以下代碼獲取

    function wpdocs_myselective_css_or_js($hook)
    {
        echo '<h1 style="color: crimson;text-align: center;">' . esc_html($hook) . '</h1>';
    }
    //獲取當前頁面hook
    add_action('admin_enqueue_scripts', 'wpdocs_myselective_css_or_js');
    教程

    第零節:Vue3 開發WordPress設置選項 - 效果預覽與使用場景

    2023-6-24 22:00:00

    教程

    后臺用戶列表添加昵稱顯示 - WordPress添加小功能

    2023-6-25 22:17:00

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 亚洲性日韩精品一区二区三区 | 日本一区二区三区中文字幕| 一区二区中文字幕| 无码人妻精品一区二区蜜桃百度| 国产一区二区在线观看麻豆| 国产婷婷一区二区三区| 国产精品一区二区三区久久| 人妻少妇AV无码一区二区| 亚洲熟妇av一区二区三区漫画| 少妇精品久久久一区二区三区| 无码人妻视频一区二区三区 | 国产一区二区三区亚洲综合| 一区二区三区免费视频播放器 | 国产无码一区二区在线| 亚洲av无码一区二区三区乱子伦 | 无码国产精成人午夜视频一区二区 | 亚洲av片一区二区三区| 亚洲美女视频一区| 久久毛片免费看一区二区三区| 真实国产乱子伦精品一区二区三区 | 91福利一区二区| 色狠狠色噜噜Av天堂一区| 影音先锋中文无码一区| 台湾无码AV一区二区三区| 91精品一区二区| 国产精品日韩一区二区三区| 国产在线精品一区免费香蕉| 精品国产伦一区二区三区在线观看| 亚洲精品伦理熟女国产一区二区 | 国产高清在线精品一区| 最新欧美精品一区二区三区| 久久免费视频一区| 精品国产福利一区二区| 国产一区二区三区在线看| 国内精自品线一区91| 免费看一区二区三区四区| 午夜AV内射一区二区三区红桃视 | 国产成人精品无码一区二区| 国产一区二区三区无码免费| 无码av免费毛片一区二区| 熟女精品视频一区二区三区|