Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 26.07.2016., 22:22   #1
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
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
Inovator je offline   Reply With Quote
Staro 26.07.2016., 22:41   #2
rodney
only fool, not a horse
Moj komp
 
rodney's Avatar
 
Datum registracije: Apr 2008
Lokacija: near zgb
Postovi: 1,276
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"
__________________
"I intend to live forever. So far, so good."

job security - example
rodney je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 26.07.2016., 22:49   #3
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
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.
Inovator je offline   Reply With Quote
Staro 28.07.2016., 09:00   #4
sinisa1989
Bazinga
Moj komp
 
sinisa1989's Avatar
 
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,873
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.
__________________
The best place to hide a dead body
is page 2 of Google search results.
sinisa1989 je offline   Reply With Quote
Staro 08.09.2016., 10:22   #5
Garko
Premium
 
Datum registracije: Jun 2008
Lokacija: Ri
Postovi: 71
Ovo bi ti takodjer moglo biti korisno http://v2.wp-api.org/
Garko je offline   Reply With Quote
Staro 10.12.2016., 23:07   #6
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
Meni bi zapravo trebao feed koji bi imao ovakvo tijelo:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>
        <id></id>
        <name></name>
        <images>
            
<image></image>
            
        </images>
        <description></description>
        <price></price>
        <currency></currency> 
        <category></category>
        <url></url>
    </item>
podatke bi vukao iz neke kategorije na webu.
Inovator je offline   Reply With Quote
Staro 14.12.2016., 09:25   #7
sinisa1989
Bazinga
Moj komp
 
sinisa1989's Avatar
 
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,873
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());
}
-->
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());
}
__________________
The best place to hide a dead body
is page 2 of Google search results.

Zadnje izmijenjeno od: sinisa1989. 19.12.2016. u 21:37.
sinisa1989 je offline   Reply With Quote
Staro 20.12.2016., 22:47   #8
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
Stavio sam
Code:
add_action( 'save_post', 'export_posts_to_xml' );
Generira se xml datoteka, ali je prazna
Inovator je offline   Reply With Quote
Staro 21.12.2016., 09:57   #9
sinisa1989
Bazinga
Moj komp
 
sinisa1989's Avatar
 
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,873
Citiraj:
Autor Inovator Pregled postova
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")?
__________________
The best place to hide a dead body
is page 2 of Google search results.
sinisa1989 je offline   Reply With Quote
Staro 21.12.2016., 15:44   #10
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
Ne, imam post_type=product sto sam i unio u kod.
Inovator je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 22.12.2016., 12:59   #11
sinisa1989
Bazinga
Moj komp
 
sinisa1989's Avatar
 
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,873
print_r(get_posts(array('post_type' => 'product')); 
-->
Citiraj:
Autor Inovator Pregled postova
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')); 
__________________
The best place to hide a dead body
is page 2 of Google search results.
sinisa1989 je offline   Reply With Quote
Staro 28.12.2016., 21:27   #12
Inovator
Premium
Moj komp
 
Inovator's Avatar
 
Datum registracije: Nov 2005
Lokacija: Bjelovar
Postovi: 462
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('<?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());
}
sruši mi se cijeli WP site.
Inovator je offline   Reply With Quote
Staro 28.12.2016., 21:53   #13
sinisa1989
Bazinga
Moj komp
 
sinisa1989's Avatar
 
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,873
Za početak izbaci print_r(). Ostalo ti piše u postu #7, tj. nemoj staviti -1 u "posts_per_page"
__________________
The best place to hide a dead body
is page 2 of Google search results.
sinisa1989 je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na