Я пытаюсь выполнить простой запуск fopen () в функции.php , а также попробовал его в файле шаблона test.php wordpress.
Но это не работает. Если я перемещу файл test.php и файл csv в место вне папки темы, оно будет работать в первый раз.
function csv_to_array($filename='', $delimiter=',') { if(!file_exists($filename) || !is_readable($filename)) return FALSE; $header = NULL; $data = array(); if (($handle = fopen($filename, 'r')) !== FALSE) { while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { if(!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } echo '<pre>'; var_dump(csv_to_array('csv/nationality-codes.csv')); echo '</pre>';
Это моя структура папок в файле темы …
Любые идеи, почему это не работает?
Вам нужно использовать полный путь к файлу, а не относительный.
Используйте функцию WordPress get_template_directory()
чтобы получить путь к каталогу шаблонов. Оттуда добавьте путь к вашему файлу.
Изменить:
var_dump(csv_to_array('csv/nationality-codes.csv'));
Для того, чтобы:
var_dump( csv_to_array( get_template_directory() . 'csv/nationality-codes.csv' ) );
Наконец, мой код работал с помощью NathanDawnson.
По какой-то причине функции.php не относились к относительному пути. Это было исправление …
get_template_directory() . '/csv/nationality-codes.csv'
См. Полный рабочий код.
// csv to array function csv_to_array($filename='', $delimiter=',') { if(!file_exists($filename) || !is_readable($filename)) return FALSE; $header = NULL; $data = array(); if (($handle = fopen($filename, 'r')) !== FALSE) { while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) { if(!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } // rider nationality function motocom_rider_nationality( $field ) { // reset choices $field['choices'] = array(); // get the textarea value from options page without any formatting $choices = csv_to_array( get_template_directory() . '/csv/nationality-codes.csv' ); $field['choices'] = array( null => 'Select nationality...' ); // loop through array and add to field 'choices' if( is_array($choices) ) { foreach( $choices as $choice ) { $label = $choice['Country']; $value = $choice['A3']; $field['choices'][ $value ] = $label . ' [' . $value . ']'; } } // Important: return the field return $field; } add_filter('acf/load_field/name=rider_nationality', 'motocom_rider_nationality');