Не мога да използвам функцията php fopen() в wordpress functions.php

Опитвам се просто да стартирам fopen() във functions.php и също го опитах във файл с шаблон на wordpress test.php.

Но не става. Ако преместя файла 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>';

Това е структурата на папките ми във файла на темата...

въведете описание на изображението тук

Някакви идеи защо не работи?


person Joshc    schedule 24.02.2014    source източник
comment
fopen ще задейства предупреждение, когато не може да отвори файл. Активирайте докладването за грешки и/или проверете регистъра на грешките си.   -  person deceze♦    schedule 24.02.2014
comment
Отваря файла добре. Просто не когато сте в папката с теми. Без грешки   -  person Joshc    schedule 24.02.2014
comment
Дайте няколко съобщения за грешка между тях и проверете къде се проваля.   -  person Abhishek Saha    schedule 24.02.2014
comment
@Joshc активира отстраняването на грешки и ще ви покаже проблема с пътя   -  person Volatil3    schedule 24.02.2014
comment
преименувайте print_r на var_dump и проверете какво връща вашата функция. Можете също да опитате да зададете отчитане на грешки, преди извикване на функция.   -  person Skriptotajs    schedule 24.02.2014
comment
отстраняването на грешки е включено, няма грешки. Var dump връща boo false - абсолютно същия код и в двата файла. Файл без тема: samlowes.com/test . Файл с шаблон на тема: samlowes.com/core/test   -  person Joshc    schedule 24.02.2014
comment
В допълнение към коментарите по-горе, тъй като зареждането на файл и работата с данните, съдържащи се в него, изглежда много като функционалност, а не като естетика/тема, трябва да обмислите създаването на персонализирана приставка за функционалност.   -  person versvs    schedule 24.02.2014
comment
Добре. Но защо не работи? Това ме побърква. Трябва просто да отвори csv точно както прави извън папката с темата   -  person Joshc    schedule 24.02.2014
comment
Заменете пътя на вашия файл с пълната версия. var_dump( csv_to_array( get_template_directory() . '/csv/nationality-codes.csv' ) );   -  person Nathan Dawson    schedule 24.02.2014
comment
@NathanDawson samlowes.com/core/wp-content/ themes/samlowes/csv/   -  person Joshc    schedule 24.02.2014
comment
@Joshc Моля, тествайте коментара ми по-горе. Трябва да е пътят на файла, а не URL адресът между другото. get_template_directory ще върне пътя, от който се нуждаете.   -  person Nathan Dawson    schedule 24.02.2014
comment
@nathanDawson ДА, пич, ти си легенда!!! Благодаря ви много за помощта. Може би искате да намерите отговор от него. Благодаря   -  person Joshc    schedule 24.02.2014
comment
Радвам се, че мога да помогна. Сега ще го превърна в отговор :)   -  person Nathan Dawson    schedule 24.02.2014


Отговори (2)


Трябва да използвате пълния път на файла вместо относителен.

Използвайте функцията на WordPress get_template_directory(), за да получите пътя до вашата директория с шаблони. Оттам добавете пътя към вашия файл.

промяна:

var_dump(csv_to_array('csv/nationality-codes.csv'));

To:

var_dump( csv_to_array( get_template_directory() . 'csv/nationality-codes.csv' ) );
person Nathan Dawson    schedule 24.02.2014

Най-накрая кодът ми работи с помощта на NathanDawnson.

По някаква причина functions.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');
person Joshc    schedule 24.02.2014