在后台调用快捷码

时间:2014-01-09 作者:Fid

我正在使用TablePress 制作一些后端表。我想做的是在不同于TablePress菜单的管理菜单中显示这些表,因为它们将可用于较低的用户组。

所以我找到了如何创建自定义菜单,在该菜单中我有自定义页面。在这些页面中,我想显示短代码[table id=1 /] (已创建的表)。

我试过了

echo do_shortcode(\'[table id=1 /]\');
但这只是说明[table id=1 /].

插件使用

add_shortcode( \'table\', array( $this, \'shortcode_table\' ) );
所以我can\'t 直接使用快捷码回调,因为我没有访问$this 对象外部的变量(对象类为TablePress_Frontend_Controller).

此外,在查看插件文件时,我注意到一个名为template-tag-functions.php 包含函数的tablepress_print_table. 然而,这个函数和shortcode一样,只在前端工作,而不在后端工作(抛出一个错误)。

解决这个问题的最佳方法是什么?

1 个回复
SO网友:gmazzap

正如您所注意到的,插件使用类的一个实例TablePress_Frontend_Controller 渲染短代码。

此实例是由仅在前端请求上创建的,这就是shortcode在后端不起作用的原因。

功能tablepress_print_table 函数使用TablePress_Frontend_Controller::shortcode_table 方法来呈现表,这就是为什么该函数也不起作用的原因。

因此,您需要的是创建该类的实例并调用shortcode_table 方法然而,要做到这一点,您需要加载所需的文件和设置类依赖项,但幸运的是插件主类\'TablePress\' 有一个静态方法来完成所有的艰苦工作:load_controller.

您可以使用它编写自定义函数并将其放入插件或主题中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 ) );
  }
}
之后,您可以在需要的地方打印所需的表格,如下所示:

// print the table with ID = \'1\'
tablepress_backend_table( \'1\' );
但是,这将在不设置样式的情况下打印表格。事实上,该插件没有在后端添加css,因此如果您希望表显示样式,您需要自己将插件样式排队(css文件位于插件的“css”子文件夹中)。对于pourpose,请确保使用wp_enqueue_style 连接到的函数admin_enqueue_scripts 钩住并使用一些逻辑将样式仅排列在您需要的特定管理页面中。

结束

相关推荐

如何指定使用$wp_admin_bar->Add_Menu()或Add_Node()添加的管理栏项目的位置?

我想在管理栏中添加指向我的站点的链接,并使该链接成为管理栏中最左侧的项目。我可以在插件函数中添加与此相关的链接:$wp_admin_bar->add_menu( array( \'id\' => \'my-link\', \'title\' => __(\'MySite\'), \'href\' => site_url() ) ); 但我想让它成为管理栏中最左边的链接,也就是说,一直