将类方法数据传递给外部函数的问题

时间:2015-04-06 作者:Kreation

我试图使用以下短代码格式调用函数:

[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>\');  
        }
    }

1 个回复
SO网友:Pieter Goosen

我还没有详细查看您的代码,但让我印象深刻的是open_csv 方法

您有以下几行

  • return $attributes[\'file\'];

  • return $attributes[\'type\'];

当您的方法当前运行时,它会停止并返回file 设置属性之后。这是什么return 在php中执行

如果从函数内调用,return语句将立即结束当前函数的执行,并将其参数作为函数调用的值返回。

您的解决方案是删除这两行,或者修改您的方法,以便稍后在方法末尾的适当位置返回值

结束

相关推荐

从CSV列表中批量删除用户

我有一个WordPress网站,有65000个注册用户,其中大约10000个是垃圾邮件机器人、非活动帐户、硬电子邮件bonces等。我将他们收集在CSV列表中,如何使用该CSV列表从我的WordPress站点删除这些用户?我还没有找到一个插件可以做到这一点。