Intereting Posts
Полная интеграция между WordPress и BBpress Как удалить кнопки из редактора WP на странице редактирования сообщений в области администратора Расширение ширины сайта в соответствии с размером изображения Принудительное восстановление неработающих эскизов как добавить пользовательский пункт меню, например, имя пользователя только в меню заголовка добавить столбец имен файлов в медиабиблиотеку для сортировки по apply_filters в контент, но игнорировать короткие коды Можно ли динамически выводить имя виджетов? Как создать пользовательскую страницу WordPress Пользовательская таксономия (категории) по типу персонализированного сообщения не возвращает результатов Возвращайте только пользовательский подзаголовок для настраиваемого типа сообщения, не эхо-родитель-родитель Получение всех пользовательских почтовых таксономий и экспонирование только их части Получить отсортированные по алфавиту данные с помощью wpdb Невозможно изменить язык (только «Английский (США)») Где находится правильный файл .mo в репозитории языков?

Использование WP_Filesystem в блоке кода

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

Мое текущее и рабочее решение вне WordPress

Сохранить содержимое

$KeepText="$name||$Phone||"; $dataHolder="keepdata.txt"; $file = fopen($dataHolder,"w"); if(fwrite($file, $KeepText)){echo "Data Saved Successfully !";} else{echo "Error Occur !";} fclose($file); 

Получение данных

 $dataHolder="keepdata.txt"; $dataPool=file($dataHolder); $TextPool=explode("||", (string)$dataPool[0]); if ($dataPool) { $ContactName=$TextPool[0]; $ContactPhone = $TextPool[1]; } 

Вывод // ContactName // ContactPhone

Логика полностью распечатает все требуемые данные.

Однако делать то же самое в WordPress порождает ошибки или даже не повторяет данные.

Я столкнулся с рекомендуемыми решениями, которые предлагали использовать WP_Filesystem. С этого сайта я попробовал, в котором он отлично работает как автономный плагин. Но это не то решение, которое я хочу.

Мне бы хотелось, чтобы wp_filesystem, как это, без admin_menu ().

 function filesystem_init($form_url, $method, $context, $fields = null) { global $wp_filesystem; if (false === ($creds = request_filesystem_credentials($form_url, $method, false, $context, $fields))) { return false; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($form_url, $method, true, $context); return false; } return true; } 

И позже function dataTosave(){} как function dataTosave(){} ниже

 function dataTosave($form_url){ global $wp_filesystem; check_admin_referer('contact_form'); $contactname = sanitize_text_field($_POST['contactname']); $contactphone = sanitize_text_field($_POST['contactphone']); $form_fields = array('contactname','contactphone'); $method = ''; $context = WP_PLUGIN_DIR . '/keepdata'; $form_url = wp_nonce_url($form_url, 'contact_form'); if(!filesystem_init($form_url, $method, $context, $form_fields)) return false; $target_dir = $wp_filesystem->find_folder($context); $target_file = trailingslashit($target_dir).'/keepdata.txt'; $dataTosave=$contactname."||".$contactphone."||"; if(!$wp_filesystem->put_contents($target_file, $dataTosave, FS_CHMOD_FILE)) return new WP_Error('writing_error', 'Error when writing file'); return "Data Saved"; } 

Как только форма отправляется

  if(isset($_POST['contactform_submit'])){ dataTosave(); //new submission run the function } <form method="post" action="" > <?php wp_nonce_field('contact_form'); ?> <label for="contactname">Contact Name</label><br> <input id="contactname" name="contactname" value="<?php echo $_POST['contactname']?>" require > <label for="contactphone">Contact Phone</label><br> <input id="contactphone" name="contactphone" value="<?php echo $_POST['contactphone']?>" required > <?php submit_button('Submit', 'primary', 'contactform_submit', true);?> </form> 

Я делаю это так, но не повезло. Спасибо

Solutions Collecting From Web of "Использование WP_Filesystem в блоке кода"

Чтение и запись в файл будет рискованным. Вы будете бороться с правами доступа к файлам, если вы сохраните где-нибудь, кроме каталога wp-content/uploads (и похоже, что вы хотите сохранить его в каталоге плагинов). Если у вас есть достаточный контроль над сервером, вы можете заставить его работать, отредактировав разрешения в каталоге плагинов, но я бы этого не сделал . Это создает потенциальные проблемы безопасности. Во всяком случае, требуя, чтобы разрешения на доступ к каталогам были отредактированы, ваш код будет очень не переносимым.

  1. Вы можете сохранить свой файл в wp-content/uploads но он может быть доступен для отслеживания.
  2. Вы можете использовать WP_Filesystem но вам нужно скорее всего получить request_filesystem_credentials() . Я не знаю, что вы подразумеваете, используя его без admin_menu() но я думаю, что вы имеете в виду без диалога. Если я правильно помню, если вы жестко задаете учетные данные в wp-config.php вы не получите всплывающий диалог . Возможно, вам потребуются пользователи для редактирования файлов, что делает ваш код менее портативным.
  3. Лучший вариант для меня – просто не пытаться манипулировать данными в файл и из него. Сохраните свои данные как пользовательские мета в базе данных.