web-dev-qa-db-fra.com

Appeler un shortcode dans le backend

J'utilise TablePress pour créer des tables d'arrière-plan. Ce que je veux faire, c’est d’afficher ces tables dans un menu d’administration différent de celui de TablePress, car elles seront disponibles pour des groupes d’utilisateurs moins importants.

J'ai donc découvert comment créer un menu personnalisé et dans ce menu, j'ai des pages personnalisées. Dans ces pages, je voudrais montrer le shortcode [table id=1 /] (une table qui a déjà été créée).

J'ai essayé

echo do_shortcode('[table id=1 /]');

mais cela ne montre que [table id=1 /].

Le plugin utilise

add_shortcode( 'table', array( $this, 'shortcode_table' ) );

donc je ne peux pas utiliser directement le rappel de shortcode car je n'ai pas accès à la variable $this en dehors de l'objet (la classe d'objet est TablePress_Frontend_Controller).

De plus, en regardant les fichiers de plug-in, j'ai remarqué un fichier appelé template-tag-functions.php qui contient une fonction tablepress_print_table. Cependant, cette fonction, tout comme le shortcode, fonctionne sur le front-end mais pas sur le back-end (en lançant une erreur).

Quelle est la meilleure façon de résoudre ce problème?

1
Fid

Comme vous l'avez remarqué, le plugin utilise une instance de la classe TablePress_Frontend_Controller pour restituer le shortcode.

Cette instance est créée uniquement sur les requêtes frontales, c’est la raison pour laquelle le shortcode ne fonctionne pas sur le backend.

La fonction tablepress_print_table utilise la méthode TablePress_Frontend_Controller::shortcode_table pour rendre la table, raison pour laquelle cette fonction ne fonctionne pas non plus.

Vous devez donc créer une instance de cette classe et appeler la méthode shortcode_table. Cependant, pour ce faire, vous devez charger les fichiers requis et les dépendances de la classe de configuration, mais heureusement, la classe principale du plugin 'TablePress' dispose d'une méthode statique qui fait tout le travail difficile à réaliser: load_controller.

Vous pouvez l'utiliser pour écrire une fonction personnalisée et la mettre dans votre plugin ou votre thème functions.php

function tablepress_backend_table( $id = '' ) {
  if ( empty($id) ) return;
  if ( class_exists('TablePress') ) {
    $c = TablePress::load_controller( 'frontend' );
    echo $c->shortcode_table( array('id' => $id ) );
  }
}

après cela, là où vous en avez besoin, vous pouvez imprimer le contenu souhaité comme suit:

// print the table with ID = '1'
tablepress_backend_table( '1' );

Cependant, cela imprimera la table sans style. En fait, le plugin n'ajoute pas de CSS au backend, donc si vous voulez un style d'affichage de vos tables, vous devez mettre en file d'attente les styles de plugins vous-même (les fichiers .css sont dans le sous-dossier 'css' du plugin). Pour cela, veillez à utiliser la fonction wp_enqueue_style accrochée dans admin_enqueue_scripts et à utiliser une certaine logique pour mettre les styles en file d'attente uniquement dans l'administrateur spécifique. pages où vous en avez besoin.

2
gmazzap