Intereting Posts

Создание XML-файлов на экране редактирования сообщений

Хорошо, это странный вопрос, я знаю ..

Я настолько удобен для WP, что я не хочу использовать какое-либо другое приложение для генерации XML (KML – Редакторы: Файлы файлов Google Earth. ).

Я хочу использовать персонализированный тип сообщения, в котором нет ничего, кроме кучи настраиваемых полей и мета-полей. У меня есть XML-схема (настраиваемая single.php): некоторые настраиваемые значения полей находятся между правильными тегами XML, и в теории у меня есть XML, который я могу создать, изменить и удалить с помощью WP.

Проблема в том, что он по-прежнему является файлом php / html, а не xml, и браузер использует его как файл html / php и пытается интерпретировать его как html, даже если xml объявлен вверху.

Есть ли libary или способ захватить html-вывод этих файлов и каким-то образом преобразовать его в XML?

Благодарю.

ОБНОВЛЕНИЕ 1: Вот как я получаю имя метки (оно дает имя), но без тегов:

<?php if(get_field('marker_style')): ?> <?php while(the_repeater_field('marker_style')): ?> <?php echo '<name>' the_sub_field('marker_style_id') '</name>' ;?> <?php endwhile; ?> <?php endif; ?> 

Обновление 2 : с помощью учебника я придумал этот код: http://pastebin.com/zGJHm19t

Но это не работает. Похоже, что я не могу хранить значения полей в переменных и использовать их на странице в этом контексте. Вы можете подумать, что это из-за плагина, который я использую для настраиваемых полей, но это не так: если я ставлю простой $title = the_title() а затем попытаюсь повторить $title я ничего не получу.

В строке 39-42 исходный учебник дал сами значения, и XML был заполнен ими красиво. Логика здесь заключается в том, что я храню значения в переменных и использую здесь вары, но, как я уже упоминал, по какой-то причине я не вижу прямо сейчас, переменные пусты.

Solutions Collecting From Web of "Создание XML-файлов на экране редактирования сообщений"

Если вы используете XML для отправки запросов Ajax, то WP имеет что-то встроенное:

 $response = new WP_Ajax_Response(); $response->add( array( // This is the parent elements name 'what' => 'xml_parent_el' // 'data' can only pass CDATA ,'data' => $foo // 'supplemental' can only pass elements with a unique name ,'supplemental' => $bar ) ); $response->send(); 

Если речь идет о вызовах ajax, зайдите в JSON.

Проблема с этим – из-за внутренней архитектуры wp xml ajax – заключается в том, что вы не можете отправлять несколько элементов с тем же именем. WordPress нуждается в ассоциативном массиве, где ключи – это имя и значения элементов … ну значения. Таким образом, именование этих ключей элементов точно так же будет отменять предыдущий элемент.

 <xml_parent_el> <single_el attr="whatever a">Value A</single_el> <single_el attr="whatever b">Value B</single_el> <single_el attr="whatever c">Value C</single_el> </xml_parent_el> 

Лучше всего в этом случае использовать класс SimpleXML предоставляемый php.


EDIT: после просмотра пасты, вот исправленная версия. Там могут быть ошибки.

 <?php $placemarks = Array(); $kml_query = new WP_Query( 'post_type=kml' ); while ( $kml_query->have_posts() ) { $kml_query->the_post(); if( get_field('marker_datas') ) { while( the_repeater_field('marker_datas') ) { $placemarks[ the_sub_field_return('placemark_name') ] = array( 'description' => the_sub_field_return( 'placemark_text' ) ,'styleUrl' => the_sub_field_return( 'placemark_style_id' ) ,'coordinates' => the_sub_field_return( 'placemark_coordinates' ) ); } } } // Document $xmlDoc = new DOMDocument(); // Root element $root = $xmlDoc->appendChild( $xmlDoc->createElement("Document") ); foreach( $placemarks as $name => $data ) { // Tag $markerTag = $root->appendChild( $xmlDoc->createElement("Placemark") ); $markerTag->appendChild( $xmlDoc->createElement( "Name", $name ) ); $markerTag->appendChild( $xmlDoc->createElement( "Description", $data['description'] ) ); $markerTag->appendChild( $xmlDoc->createElement("styleUrl", $data['styleUrl'] ) ); // Coordinates $coordTag = $markerTag->appendChild( $xmlDoc->createElement( "Point" ) ); $coordTag->appendChild( $xmlDoc->createElement( "coordinates", $data['coordinates'] ) ); } header("Content-Type: text/plain"); // make the output pretty (later) # $xmlDoc->formatOutput = true; echo $xmlDoc->saveXML(); 

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

 function the_sub_field_return($field_name, $field = false) { $value = get_sub_field($field_name, $field); if(is_array($value)) { $value = implode(', ',$value); } return $value; } 

Если вы используете один и тот же плагин для аналогичного проекта, не забудьте добавить указанную выше функцию в файл api.php, расположенный в каталоге плагина.