Для цикла по именованной папке, чтобы прочитать каждое .txt имя файла и содержимое - PullRequest
3 голосов
/ 13 марта 2011

Сценарий ниже берет именованный файл, который находится в папке «myplugin» (папка, в которой находится сам скрипт), и запускает file_get_contents () для загрузки содержимого в память, а затем выполняет некоторую предварительную обработку содержимого перед наконец, вставив его как запись в базу данных WordPress с помощью метода wp_insert_post.

$my_post3 = array();
$my_post3['post_title'] = 'Privacy Policy';
if(file_exists(ABSPATH.'/wp-content/plugins/myplugin/pages/privacy_policy.txt'))
{
$my_privacy_policy = file_get_contents(ABSPATH.'/wp-content/plugins/myplugin/pages/privacy_policy.txt');
}
else
{
$my_privacy_policy = "";
}
$my_post3['post_content'] = addslashes($my_post3_replace);
$my_post3['post_type'] = 'page';
$my_post3['post_status'] = 'publish';
wp_insert_post($my_post3);

Этот метод работает довольно хорошо. Однако этот метод заставляет меня писать разные процедуры для каждого файла, который я хочу использовать в качестве основы для новой страницы.

Вместо этого я хотел бы создать папку с именем "pages" и поместить в нее мои файлы .txt, а затем запустить цикл for для содержимого папки, создав новую страницу для каждого файла в папке. , Я хотел бы использовать имя файла (без расширения .txt) в качестве имени страницы.

Например, в папке страниц могут быть следующие файлы:

О Us.txt Свяжитесь с нами.txt

И эта процедура приведет к созданию двух новых страниц на сайте WordPress, одна из которых называется «О нас», содержащая содержимое, найденное в этом файле. Другая страница, конечно, будет «Связаться с нами» с содержимым этого файла.

Таким образом, я могу просто вставить неограниченное количество именованных и предварительно заполненных .txt файлов в эту папку, и когда я активирую свой плагин, он создает эти страницы.

Мне просто нужна помощь с циклом for и как обращаться к папке и файлам.

У меня также будет папка «posts», которая будет делать то же самое для постов, что и эта процедура для страниц.

Заранее благодарим за помощь и предложения.

Обновление на основе ответа @clientbucket:

DEFINE ('PAGES', './pages/');
$directory_pages = new DirectoryIterator(PAGES); 
foreach ($directory_pages as $files) {
    if ($files_pages->isFile()) {
        $file_name_page = $files_pages->getFilename();
        $my_page_content = file_get_contents(PAGES. $file_name_page);
        $my_page['post_content'] = addslashes($my_page_content);
        $my_page['post_title'] = $file_name_page;
        $my_page['post_type'] = 'page';
        $my_page['post_status'] = 'publish';
        wp_insert_post($my_page);
    }
}

DEFINE ('POSTS', './posts/');
$directory_posts = new DirectoryIterator(POSTS);
foreach ($directory_posts as $files_posts) {
    if ($files_posts->isFile()) {
        $file_name_post = $files_posts->getFilename();
        $my_post_content = file_get_contents(POSTS. $file_name_post);
        $my_post['post_content'] = addslashes($my_post_content);
        $my_post['post_title'] = $file_name_post;
        $my_post['post_type'] = 'post';
        $my_post['post_status'] = 'publish';
        $post_id = wp_insert_post($my_post);
        stick_post($post_id);   
        }
}

Неустранимая ошибка: необработанное исключение «UnexpectedValueException» с сообщением «DirectoryIterator :: __ construct (./ pages /) [directoryiterator .-- construct]: не удалось открыть каталог: нет такого файла или каталога» в C: \ xampplite \ htdocs \ mytestsite \ сор-контента \ Plugins \ myplugindirectory \ myplugin.php: 339

Строка 339 здесь> $ directory_pages = new DirectoryIterator (PAGES);

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

Вот еще один способ попробовать.

DEFINE ('PAGES', './pages/'); //Define the directory path
$directory = new DirectoryIterator(PAGES); //Get all the contents in the directory 
foreach ($directory as $files) { //Check that the contents of the directory are each files  and then do what you want with them after you have the name of the file. 
    if ($files->isFile()) {
        $file_name = $files->getFilename();
        $my_page = file_get_contents(PAGES. $file_name); //Collect the content of the file.
    } else {
        //Insert nothing into the $my_privacy_policy variable.
    }
    echo $my_page; // Do what you want with the contents of the file.
}
1 голос
/ 13 марта 2011

Из руководства по PHP здесь:

http://php.net/manual/en/function.glob.php

Они предоставляют это решение для поиска всех текстовых файлов в каталоге:

<?php
foreach (glob("*.txt") as $filename) {
    echo $filename . "\n";
}
?>

Учитывая этот пример, ваш фактический запрос должен иметь возможность создать файл на основе имени в другом каталоге. Я оставлю вам тяжелую работу - но это простая реализация:

<?php
$source_dir = "/your/directory/with/textfiles";
$target_dir = "/directory/to/create/files/in";
foreach (glob($source_dir . DIRECTORY_SEPARATOR . "*.txt") as $filename) {
    $filepart = explode('.',$filename);
    file_put_contents($target_dir . DIRECTORY_SEPARATOR . $filepart[0] . ".php");
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...