PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Generiranje XML-a iz WP-a (https://forum.pcekspert.com/showthread.php?t=279963)

Inovator 26.07.2016. 22:22

Generiranje XML-a iz WP-a
 
Imam wordpress site i trebam generirati xml datoteku koja ce sadrzavati elemente jedne od kategorija na stranici. Dakle, pitanje je kako povuci podatke iz kategorije i upisati ih u xml?

Hvala

rodney 26.07.2016. 22:41

Definiraj element i kategoriju. Da li treba radit kakve dodatne pozive prema stranici ili je sve što trebaš vidljivo? Jel to tvoja stranica ili? Koliko toga ima?
edit: aha, kategorija je neka wp fora. Ako je tvoja stranica, ja bih radije čupao podatke prije, nego parsirao html.
edit2: nisam baš s tim cmsovima na svom, vidim ima hrpa pluginova za export u xml.
Guglaj neš ala "wordpress export category to xml"

Inovator 26.07.2016. 22:49

Sve je vidljivo. Npr. kategorija pop glazba; treba povuci naziv grupe, godinu izdanja albuma i naziv albuma. I to za svaki album trpati u xml. Prakticki radit feed. Postoje pluginovi koji if feeda pune wordpress, ali nisam nasao kontra, da iz gotovog weba generira xml.

sinisa1989 28.07.2016. 09:00

Jel možeš pojasniti što je "Pop glazba", a što je "Naziv grupe", "Godina izdanja", "Naziv albuma" u terminima Wp-a?

Da li je možda "Pop glazba" custom taxonomy, "Naziv grupe" custom post type, a "Godina izdanja" i "Naziv albuma" meta keys, odnosno values?

Uglavnom, ako je princip rada takav ili sličan to možeš poprilično jednostavno izvući sa WP_Query. Dok izvučeš podatke van, ispisati ih možeš u kojem god ti obliku odgovara.

Čak i ako ti treba cron, možeš to sve preko WP-a odraditi (wp_cron).
Naravno, ako se često mijenja sadržaj, onda moraš razmišljati o actionima koje možeš "zakačiti" za neki event (npr. prilikom spremanja posta).

Ovim smjerom bi trebao krenuti ako ne pronađeš gotovo rješenje. :D

Garko 08.09.2016. 10:22

Ovo bi ti takodjer moglo biti korisno http://v2.wp-api.org/

Inovator 10.12.2016. 23:07

Meni bi zapravo trebao feed koji bi imao ovakvo tijelo:

Code:



   
       
       
       
           

           
       

       
       
       
       
       
   

podatke bi vukao iz neke kategorije na webu.

sinisa1989 14.12.2016. 09:25

1. get_posts(), get_post_meta(), get_the_category()
2. XML
3. Cron

Cron ti nije neophodan. XML možeš generirati i kad spremaš post. save_post()
To sve možeš napraviti u functions.php od teme koju koristiš. A možeš napraviti i plugin.

EDIT:
Mali primjer. Ubaci to u functions.php teme koju koristiš.
Btw. "init" akcija nije baš najpametnije rješenje jer se xml generira kod svakog učitavanja stranice. Ako imaš puno postova, vjerojatno će skripta "puknuti" prije nego što odradi sve što treba. U tom slučaju stavi 'posts_per_page' => 10. -1 je u principu "SELECT *"
PHP kod:

add_action('init', 'export_posts_to_xml');
function export_posts_to_xml()
{
    $args = array(
        'posts_per_page' => -1,
        'offset' => 0,
        'category' => '',
        'category_name' => '',
        'orderby' => 'date',
        'order' => 'DESC',
        'include' => '',
        'exclude' => '',
        'meta_key' => '',
        'meta_value' => '',
        'post_type' => 'post',
        'post_mime_type' => '',
        'post_parent' => '',
        'author' => '',
        'author_name' => '',
        'post_status' => 'publish',
        'suppress_filters' => TRUE
    );
    $posts = get_posts($args);
    $file = fopen('posts.xml','w');
    $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><employees></employees>');
    foreach($posts as $post) {
        setup_postdata($post);
        $image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID));
        $xml->addChild('post_id', $post->ID);
        $xml->addChild('post_title', $post->post_title);
        $xml->addChild('post_content', $post->post_content);
        $xml->addChild('post_image', $image[0]);
    }
    wp_reset_postdata();
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/posts.xml',$xml->saveXML());
}


Inovator 20.12.2016. 22:47

Stavio sam
Code:

add_action( 'save_post', 'export_posts_to_xml' );
Generira se xml datoteka, ali je prazna

sinisa1989 21.12.2016. 09:57

Citiraj:

Autor Inovator (Post 3001884)
Stavio sam
Code:

add_action( 'save_post', 'export_posts_to_xml' );
Generira se xml datoteka, ali je prazna

Imaš li uopće postova (post_type=post")?

Inovator 21.12.2016. 15:44

Ne, imam post_type=product sto sam i unio u kod.

sinisa1989 22.12.2016. 12:59

Citiraj:

Autor Inovator (Post 3002066)
Ne, imam post_type=product sto sam i unio u kod.

Ja sam isto samo promijenio post type u product i radi mi ok. Probaj ovo i vidi jel ti vraća što.
PHP kod:

print_r(get_posts(array('post_type' => 'product')); 


Inovator 28.12.2016. 21:27

Kad stavim:

Code:

add_action( 'save_post', 'export_posts_to_xml' );
function export_posts_to_xml()
{
    $args = array(
        'posts_per_page' => -1,
        'offset' => 0,
        'category' => '',
        'category_name' => '',
        'orderby' => 'date',
        'order' => 'DESC',
        'include' => '',
        'exclude' => '',
        'meta_key' => '',
        'meta_value' => '',
        'post_type' => 'product',
        'post_mime_type' => '',
        'post_parent' => '',
        'author' => '',
        'author_name' => '',
        'post_status' => 'publish',
        'suppress_filters' => TRUE
       
    );
    $posts = get_posts($args);
    $file = fopen('posts.xml','w');
    print_r(get_posts(array('post_type' => 'product'));
    $xml = new SimpleXMLElement('
');
    foreach($posts as $post) {
        setup_postdata($post);
        $image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID));
        $xml->addChild('post_id', $post->ID);
        $xml->addChild('post_title', $post->post_title);
        $xml->addChild('post_content', $post->post_content);
        $xml->addChild('post_image', $image[0]);
    }
    wp_reset_postdata();
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/posts.xml',$xml->saveXML());
}

sruši mi se cijeli WP site.

sinisa1989 28.12.2016. 21:53

Za početak izbaci print_r(). Ostalo ti piše u postu #7, tj. nemoj staviti -1 u "posts_per_page"


Sva vremena su GMT +2. Sada je 16:01.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger