- 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.
-
AuteurMessages
-
10 mars 2023 à 16 h 05 min #2447991
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,
Alex11 mars 2023 à 15 h 22 min #2448083Bonjour,
Je pense que c’est normal car vous êtes sur une page d’options et en js cela ne fonctionnera que dans l’éditeur.
14 mars 2023 à 14 h 45 min #2448493Bonjour 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.
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.