WordPress

Lokalizacja strony ustawień wtyczki React

  • 7 marca, 2023
  • 3 min read
Lokalizacja strony ustawień wtyczki React


Uczę się tworzyć wtyczki i dzięki Sally CJ udało się uzyskać tłumaczenie działające na plikach PHP i Gutenberg Block… (Jeśli potrzebujesz pomocy, sprawdź tutaj) Ale nie mogę sprawić, by to działało na stronie ustawień wtyczki za pomocą React.

Nie znalazłem informacji jak to zrobić. Sprawdziłem także bibliotekę @wordpress/react-i18n , ale jeśli ją załaduję, wszystko przestanie działać.

To jest część kodu. To prosta wtyczka do nauki. Ładuje się dobrze, dodaje blok do edytora, a blok jest zlokalizowany, dodaje stronę menu administratora z elementem div, który React zastępuje, ale lokalizacja wewnątrz tego Reacta nie działa.

Dzięki.

Struktura:

/my-block/
      /build/
          - index.js
          - index.js.map
          - index.asset.php
      /src/
          - index.js
      /languages/
          - my-block-es_ES.mo
          - my-block-es_ES.po
          - my-block-es_ES.pot
          - my-block-es_ES-dfbff627e6c248bcb3b61d7d06da9ca9.json

       - block.json
       - my-block.php
       - package.json
       - ...

Główny PHP:

<?php

/**
 * Plugin Name:       My Block
 * Requires at least: 6.1
 * Requires PHP:      7.0
 * Version:           1
 * Text Domain:       my-block
 */

function create_block_my_block_block_init()
{
    load_plugin_textdomain('my-block', false, dirname(plugin_basename(__FILE__)) . '/languages');

    register_block_type(__DIR__);
}
add_action('init', 'create_block_my_block_block_init');

function script_translations()
{
    $script_handle = generate_block_asset_handle('my-block/local', 'editorScript');
    wp_set_script_translations(
        $script_handle,
        'my-block',
        plugin_dir_path(__FILE__) . 'languages'
    );
}
add_action('enqueue_block_editor_assets', 'script_translations');

function create_admin_menu()
{
    add_menu_page(
        'my-block',
        __('My Block', 'my-block'),
        'manage_options',
        'my-block',
        'my_menu_page_template',
        'dashicons-buddicons-replies'
    );
}
add_action('admin_menu', 'create_admin_menu');

function my_menu_page_template()
{
    echo '<div id="wrap">';
        echo '<div id="my-block">' . __('My Block Local', 'my-block') . '</div>';
    echo '</div>';
}

function my_enqueue_admin_scripts()
{
    $asset = include plugin_dir_path(__FILE__) . 'build/index.asset.php';

    wp_enqueue_script(
        'my-block',
        plugin_dir_url(__FILE__) . 'build/index.js',
        $asset['dependencies'],
        $asset['version'],
        wp_rand(),
        true
    );
}
add_action('admin_enqueue_scripts', 'my_enqueue_admin_scripts');

src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';

//Settings page
document.addEventListener('DOMContentLoaded', () => {
   const element = document.getElementById('my-block');
   if (typeof element == 'undefined' || element == null) return;
   // * i18n __ here ISN'T translated *
   ReactDOM.render(<SettingsPage/>, element);
})
const SettingsPage = () => {
   return <div>
      {__('Hello world', 'my-block')}
   </div>
}

// Register the block
// ** i18n __ here IS translated **
registerBlockType('my-block/local', {
   title: __('My Block Local', 'my-block'),
   edit: function () {
      return <p> {__('Hello world', 'my-block')} (from the editor)</p>;
   },
   save: function () {
      return <p> {__('Hello world', 'my-block')} (from the frontend) </p>;
   },
});


Źródło

Warto przeczytać!  shortcode - Załaduj formularz grawitacyjny przez ajax, używając kodu do_shortcode