Вопрос или проблема
Я создал файл с использованием json и экспортировал его. Он создает HTML-теги. На самом деле, я не хочу, чтобы эта HTML-часть была в файле. Ниже я делюсь структурой моего текущего файла: стандартные HTML-теги, такие как head, title и ниже json вместе с ним.
<html xmlns="http://www.w3.org/1999/xhtml" class="wp-toolbar" lang="en-US">
<!--<![en-->
[{
"ID" : 13,
"post_author" : "1",
"post_date" : "2015-10-30 07:09:16",
"post_date_gmt" : "2015-10-30 07:09:16",
"post_content" : "Test",
"post_title" : "Test",
"post_excerpt" : "",
"post_status" : "publish",
"comment_status" : "closed",
"ping_status" : "closed",
"post_password" : "",
"post_name" : "test",
"to_ping" : "",
"pinged" : "",
"post_modified" : "2015-10-30 07:09:16",
"post_modified_gmt" : "2015-10-30 07:09:16",
"post_content_filtered" : "",
"post_parent" : 0,
"guid" : "url/?post_type=wpcp_pointer&p=9",
"menu_order" : 0,
"post_type" : "wpcp_pointer",
"post_mime_type" : "",
"comment_count" : "0",
"filter" : "raw"
}
]
Но что я хочу, так это:
[{
"ID" : 13,
"post_author" : "1",
"post_date" : "2015-10-30 07:09:16",
"post_date_gmt" : "2015-10-30 07:09:16",
"post_content" : "Test",
"post_title" : "Test",
"post_excerpt" : "",
"post_status" : "publish",
"comment_status" : "closed",
"ping_status" : "closed",
"post_password" : "",
"post_name" : "test",
"to_ping" : "",
"pinged" : "",
"post_modified" : "2015-10-30 07:09:16",
"post_modified_gmt" : "2015-10-30 07:09:16",
"post_content_filtered" : "",
"post_parent" : 0,
"guid" : "url/?post_type=wpcp_pointer&p=9",
"menu_order" : 0,
"post_type" : "wpcp_pointer",
"post_mime_type" : "",
"comment_count" : "0",
"filter" : "raw"
}
]
Только массив JSON должен быть в экспортируемом файле. Пожалуйста, помогите, как я могу удалить эту HTML-часть из JSON файла. Ниже приведена часть кода, используемая для генерации этого кода:
$json_file = json_encode($need_options); // Кодировать данные в json данные
$json_file = stripslashes($json_file);
echo $json_file;
header("Content-Type: text/json; charset=" . get_option( 'blog_charset'));
header("Content-Disposition: attachment; filename=$json_name.json");
exit();
Любая помощь будет очень приветствоваться.
Вы что-то упустили в описании — а именно, неясно, как/где вы загружаете этот код. Я предполагаю, что вы каким-то образом пропускаете все через файл шаблона или через файл плагина, поскольку у вас отображается код шаблона.
На мой взгляд, вместо этого вам следует использовать AJAX API:
function my_grab_ajax_wpse_108874() {
if (empty($_GET['need_options'])) die;
$need_options = $_GET['need_options']; // ??????
$need_options = get_post($need_options);
$json_name = $need_options->post_name;
$json_file = json_encode($need_options); // Кодировать данные в json данные
$json_file = stripslashes($json_file);
header("Content-Type: text/json; charset=" . get_option( 'blog_charset'));
header("Content-Disposition: attachment; filename=$json_name.json");
echo $json_file;
exit();
}
add_action('wp_ajax_my_grab_ajax', 'my_grab_ajax_wpse_108874');
add_action('wp_ajax_nopriv_my_grab_ajax', 'my_grab_ajax_wpse_108874');
Затем запросите данные с http://example.com/wp-admin/admin-ajax.php?action=mygrab_ajax&need_options={some post ID}
Ответ или решение
Чтобы удалить HTML-код из экспортируемого JSON-файла в вашем проекте на PHP, обратим внимание на несколько важных аспектов кода, который вы предоставили. Ваша задача заключается в том, чтобы экспортировать только JSON-данные без лишних HTML-тегов. Давайте разберем, как это правильно реализовать.
1. Удалите HTML теги из кода
Как видно из примера, ваш код генерирует HTML, который, вероятно, не требует вставки. Нам необходимо сосредоточиться на получении и экспорте только JSON-данных. Проверьте, откуда ваш PHP-скрипт получает HTML-шаблоны и уберите их.
2. Измените структуру вывода JSON-данных
Убедитесь, что ваш код возвращает данные в чистом JSON-формате без лишних HTML-оберток. Выполните следующую модификацию вашего кода:
function my_grab_ajax_wpse_108874() {
if (empty($_GET['need_options'])) die;
// Получение идентификатора поста
$need_options = $_GET['need_options'];
$need_options = get_post($need_options);
// Переименование файла на базе имени поста
$json_name = $need_options->post_name;
// Кодирование данных в формат JSON
$json_file = json_encode($need_options);
$json_file = stripslashes($json_file);
// Устанавливаем заголовки для ответа
header("Content-Type: application/json; charset=" . get_option('blog_charset'));
header("Content-Disposition: attachment; filename=$json_name.json");
// Выводим JSON данные без HTML
echo $json_file;
exit();
}
add_action('wp_ajax_my_grab_ajax', 'my_grab_ajax_wpse_108874');
add_action('wp_ajax_nopriv_my_grab_ajax', 'my_grab_ajax_wpse_108874');
3. Загрузка данных через AJAX
Приведенный код предполагает использование AJAX для асинхронной загрузки данных. Убедитесь, что вы вызываете данные по следующему URL:
http://example.com/wp-admin/admin-ajax.php?action=mygrab_ajax&need_options={some post ID}
4. Решение проблем с HTML в JSON
Если вы заметили, что HTML-теги все еще появляются в JSON-файле даже после выполнения всех вышеперечисленных шагов, возможно, проблема заключается в самом контенте, который вы загружаете. Убедитесь, что данные, извлекаемые из get_post()
, не содержат HTML-кода. В этом случае вам может понадобиться применить функцию wp_strip_all_tags
для очистки значений перед их кодированием в JSON, например:
$need_options->post_content = wp_strip_all_tags($need_options->post_content);
$need_options->post_title = wp_strip_all_tags($need_options->post_title);
Заключение
Ваша итоговая цель состоит в том, чтобы вернуть чистые JSON-данные, которые могут быть легко обработаны на клиенте или использованы в других приложениях без ненужных HTML-тегов. Обеспечив правильность кодирования и обработку данных, вы сможете успешно экспортировать данные в желаемом формате.