我试图使用以下短代码格式调用函数:
[priceguide file=\'test.csv\' type=\'mods\']
当我这样做的时候,我回到页面上的只是文件名,
test.csv
, 没有别的了。
我试图调用的函数应该接收文件名,test.csv
, 打开该文件并解析其中的值,然后将其传递给数组$data
.
然后根据type
, 该函数调用另一个函数,该函数应显示一些HTML,这取决于来自open_csv
.
csv文件位于插件文件夹中,在短代码和实际文件名中都有正确的名称,并且没有损坏。
<小时>
add_shortcode( \'priceguide\', [ new MyPlugin, \'open_csv\' ] );
class MyPlugin
{
private $data = [];
public function __construct()
{
add_filter( \'get_my_plugin_instance\', [ $this, \'get_instance\' ] );
}
public function get_instance()
{
return $this;
}
public function open_csv( $atts ) {
$attributes = shortcode_atts( array(
\'file\' => \'\',
\'type\' => \'\',
), $atts );
$handle = fopen( plugin_dir_path( __FILE__ ) . $attributes[\'file\'] , "r" );
$this->data = fgetcsv($handle, 1000, ",");
if (in_array("mods", $attributes)) {
displaymodshtml();
}
elseif (in_array("items", $attributes)) {
displayitemshtml();
}
return $attributes[\'file\', \'type\'];
}
}
function displaymodshtml () {
ob_start();
echo(\'<input type="text" class="search" id="search" placeholder="Search">\');
echo(\'<br>\');
echo(\'<table id="table"> <tr class="hidden">
<th><b>
Name</b>
</th>
<th><b>
Cheese</b>
</th>
<th><b>
Price (Pesos)</b>
</th>
<th><b>Vote</b>
</th>
</tr>
<tbody>\');
$CSVData = new MyPlugin;
$ModsData = $CSVData->data;
// assign variables to array values
while ($ModsData !== FALSE) {
$name = $ModsData[0];
$quanid = $ModsData[2];
$table = $ModsData[3];
unset($ModsData[2]);
unset($ModsData[3]);
//generate HTML
echo(\'<tr>\');
foreach ($ModsData as $index=>$val) {
echo(\'<td>\');
echo htmlentities($val, ENT_QUOTES);
echo(\'</td>\');
}
}