[Résolu] Lister tous les blocks de la bibliothèque de blocks dans une page d’option (Créer un compte)

  • WordPress :6.1
  • Statut : résolu
  • Ce sujet contient 2 réponses, 2 participants et a été mis à jour pour la dernière fois par Ostalada, le il y a 2 années.
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Messages
  • #2447991
    Ostalada
    Participant
    Initié WordPress
    16 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 8.0
    • Thème utilisé : Twenty Twenty-Three
    • Extensions en place : Gutemberg
    • Nom de l’hébergeur : En local

    Problème(s) rencontré(s) :

    Bonjour WordPress France,

    Je suis en train de développer une extension qui a besoin de lister sur une page d’option tous les blocks dispos dans l’éditeur. Il existe bien ceci en PHP :

    $block_types = WP_Block_Type_Registry::get_instance()->get_all_registered();

    foreach ($block_types as $block_type) {
    echo $block_type->name . '<br>';
    }

     

    Mais j’aimerais la même chose en JS. J’ai tenté ceci :

    class MonExtension{

    function __construct(){
    add_action('admin_enqueue_scripts', array($this, 'enqueue'), 10, 1);
    }

    function enqueue($hook_suffix){
    if ($hook_suffix === 'le-suffix-de-la-page-de-mon-extenion') {
    wp_register_script('mon-extention-slug', plugins_url('/chemin/relatif/vers/mon/script.js', __FILE__), array('wp-blocks', 'wp-edit-post'), '1.0.0', true);
    wp_enqueue_script('mon-extention-slug');
    }
    }
    }

    new MonExtension();

    wp.domReady(() => {
    console.log(wp.blocks.getBlockTypes());
    });

    Mais j’obtiens un array vide en console. Il semblerait que cette méthode renvoie tous les blocks présents dans l’éditeur. Mais je ne trouve pas dans une page avec un éditeur. Je me trouve bien dans une page d’option en backend et j’aimerais lister tous les blocks de la bibliothèque de blocks. Existe-t-il une méthode ou une route API pour cela ? Si il n’y a rien, je créerai ma propre route API en dernier recours.

    Bonne journée,
    Alex

    #2448083
    Rock4Temps
    Participant
    Maître WordPress
    1191 contributions

    Bonjour,

    Je pense que c’est normal car vous êtes sur une page d’options et en js cela ne fonctionnera que dans  l’éditeur.

    #2448493
    Ostalada
    Participant
    Initié WordPress
    16 contributions

    Bonjour Rock4Temps,

    Merci pour ton message. Je ne sais pas s’il faut impérativement avoir l’éditeur pour accéder à l’object wp.blocks et à toutes ces méthodes. En tout cas, j’ai contourné le problème, en créant un route API. Voici le code simplifié de mon plugin :

    class MonExtension{

    function __construct(){
    add_action('rest_api_init', array($this, 'register_route'), 10, 1);
    }

    function register_route($wp_rest_server){
    register_rest_route(
    'mon-extension/v1',
    '/blocks',
    array(
    'methods' => 'GET',
    'callback' => array($this, 'get_block_datas'),
    'permission_callback' => function(){
    return 'manage-option';
    }
    )
    );
    }
    }

    function get_block_datas(){
    return WP_Block_Type_Registry::get_instance()->get_all_registered();
    }
    }

    new MonExtension();

     

    Désormais, les données que je cherchais sont accessibles en JS, via l’API, à cette adresse : https://lenomdedomainedemonsite/wp-json/mon-extension/v1/blocks. Merci encore.

    Alex

    • Cette réponse a été modifiée le il y a 2 années par Ostalada.
3 sujets de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.