0

I am trying to add the information below into a Wordpress database table (specifically the wp_postmeta table). But I can't figure out how to add the ones with the same node name.

The XML document is:

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
    xmlns:excerpt="http://wordpress.org/export/1.1/excerpt/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.1/"
>

<channel>
    <title>Title</title>
    <link>http://localhost/WP/</link>
    <description>Just another WordPress site</description>
    <pubDate>Mon, 30 Jul 2012 08:53:47 +0000</pubDate>
    <language>en</language>
    <wp:wxr_version>1.1</wp:wxr_version>
    <wp:base_site_url>http://localhost/WP/</wp:base_site_url>
    <wp:base_blog_url>http://localhost/WP/</wp:base_blog_url>
    <generator>http://wordpress.org/?v=3.3.2</generator>
    <item>
        <title>IMPORT TEST 1</title> 
        <link>http://localhost/WP/IMPORT TEST/</link>
        <dc:creator>admin</dc:creator>
        <wp:comment_status>open</wp:comment_status>
        <wp:status>publish</wp:status>
        <wp:post_type>post</wp:post_type>
        <category domain="category" nicename="plumbing"><![CDATA[Plumbing]]></category> 
        <category domain="category" nicename="news"><![CDATA[NEWS]]></category>    
        <wp:postmeta>
        <wp:meta_key>thumbnail</wp:meta_key>
            <wp:meta_value><![CDATA[decorating8.jpg]]></wp:meta_value>
        </wp:postmeta>
        <wp:postmeta>
            <wp:meta_key>content</wp:meta_key>                            
            <wp:meta_value><![CDATA[THIS PART IS TO BE FILLED WITH THE TEXT YOU WANT]]></wp:meta_value>  
        </wp:postmeta>
        <wp:postmeta>
            <wp:meta_key>youtube_video_link</wp:meta_key>
            <wp:meta_value><![CDATA[]]></wp:meta_value> 
        </wp:postmeta>
    </item>
</channel>
</rss>

The code I have so far is:

<?php
//error display
error_reporting(E_ALL);
ini_set('display_errors', true);

$target_path = "temp/";

$target_path = $target_path . basename($_FILES['feed']['name']); 

if(move_uploaded_file($_FILES['feed']['tmp_name'], $target_path)) {

    $time = time();
    $rand = rand(100,500);
    rename("temp/".basename($_FILES['feed']['name']), "temp/".$time.$rand.".xml");

    $filename = $time.$rand.".xml";

    $objDOM = new DOMDocument();
    $objDOM->load("temp/".$filename);
    $job = $objDOM->getElementsByTagName("job"); 

    foreach( $job as $value ) {
    $title = $value->getElementsByTagName("title");
    $link = $value->getElementsByTagName("link");
    $post_name = $value->getElementsByTagName("post_name");
    $status = $value->getElementsByTagName("status");
    $category = $value->getElementsByTagName("category");
    $category = $value->getElementsByTagName("category");
    $wp:postmeta = $value->getElementsByTagName("wp:postmeta");
    $wp:postmeta = $value->getElementsByTagName("wp:postmeta");
    $wp:postmeta = $value->getElementsByTagName("wp:postmeta");
    $wp:postmeta = $value->getElementsByTagName("wp:postmeta");
    $wp:postmeta = $value->getElementsByTagName("wp:postmeta");
    }

    $f01 = $title->item(0)->nodeValue;
    $f02  = $link->item(0)->nodeValue;
    $f03  = $post_name->item(0)->nodeValue;
    $f04  = $status->item(0)->nodeValue;
    $f05  = $category->item(0)->nodeValue;
    $f06  = $wp:postmeta->item(0)->nodeValue;
    $f07 = $wp:

    mysql_connect("localhost", "root", "password") or die(mysql_error());
    mysql_select_db("dbname") or die(mysql_error());

//if insert entry   
if($title != ""){

    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value )" ) or die(mysql_error());
    $current_id = mysql_insert_id(); 
} else{
    //file didn't been upload properly
    echo "There was an error uploading the file, please try again!";
}

?>

Edited by PBDeveloper

2
Contributors
9
Replies
10
Views
5 Years
Discussion Span
Last Post by pritaeas
0

$wp:postmeta = $value->getElementsByTagName("wp:postmeta");

You should handle this just like you did with "job", with a foreach.

0

Can you be more specific? Is it something like this?

<?php
    //error display
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    $target_path = "temp/";
    $target_path = $target_path . basename($_FILES['feed']['name']);
    if(move_uploaded_file($_FILES['feed']['tmp_name'], $target_path)) {
    $time = time();
    $rand = rand(100,500);
    rename("temp/".basename($_FILES['feed']['name']), "temp/".$time.$rand.".xml");
    $filename = $time.$rand.".xml";
    $objDOM = new DOMDocument();
    $objDOM->load("temp/".$filename);
    $job = $objDOM->getElementsByTagName("job");

    foreach( $job as $value ) {
        $meta_value = $value->getElementsByTagName("title");
        $link = $value->getElementsByTagName("link");
        $post_name = $value->getElementsByTagName("post_name");
        $status = $value->getElementsByTagName("status");
        $category = $value->getElementsByTagName("category");
        $category = $value->getElementsByTagName("category");


        $f01 = $title->item(0)->nodeValue;
        $f02  = $link->item(0)->nodeValue;
        $f03  = $post_name->item(0)->nodeValue;
        $f04  = $status->item(0)->nodeValue;
        $f05  = $category->item(0)->nodeValue;


        foreach( $post as $entry ) {
            $meta_key0.$entry = $wp:postmeta = $entry->getElementsByTagName("wp:meta_key");
            $meta_value0.$entry = $wp:postmeta = $entry->getElementsByTagName("wp:meta_value");
            $meta_key0.$entry  = $wp:postmeta->item(0)->nodeValue;
            $meta_value0.$entry  = $wp:postmeta->item(0)->nodeValue;
        }
    mysql_connect("localhost", "root", "password") or die(mysql_error());
    mysql_select_db("dbname") or die(mysql_error());
    //if insert entry
    if($title != ""){
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value )" ) or die(mysql_error());
    $current_id = mysql_insert_id();
    } else{
    //file didn't been upload properly
    echo "There was an error uploading the file, please try again!";
    }
    ?>

Thanks

Edited by PBDeveloper

0

I have just written this, but it isn't doing anything. What is wrong with the code?

<?php
//error display
error_reporting(E_ALL);
ini_set('display_errors', true);

$target_path = "temp/";

$target_path = $target_path . basename($_FILES['feed']['name']); 

if(move_uploaded_file($_FILES['feed']['tmp_name'], $target_path)) {

    $time = time();
    $rand = rand(100,500);
    rename("temp/".basename($_FILES['feed']['name']), "temp/".$time.$rand.".xml");

    $filename = $time.$rand.".xml";

    $objDOM = new DOMDocument();
    $objDOM->load("temp/".$filename);
    $job = $objDOM->getElementsByTagName("job"); 

    foreach( $job as $value ) {

    //Get the value of the elements
    $title = $value->getElementsByTagName("title");
    $link = $value->getElementsByTagName("link");
    $post_name = $value->getElementsByTagName("post_name");
    $status = $value->getElementsByTagName("status");
    $category = $value->getElementsByTagName("category");
    $category = $value->getElementsByTagName("category");

    //Establish connection
    mysql_connect("localhost", "user", "pass") or die(mysql_error());
    mysql_select_db("ableskillswp") or die(mysql_error());


    //Assign values and insert into wp_postmeta table
    $meta_value = $title->item(0)->nodeValue;
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'title','$meta_value' )" ) or die(mysql_error());

    $meta_value  = $link->item(0)->nodeValue;
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'link','$meta_value' )" ) or die(mysql_error());

    $meta_value  = $post_name->item(0)->nodeValue;
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'post_name','$meta_value' )" ) or die(mysql_error());

    $meta_value  = $status->item(0)->nodeValue;
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'status','$meta_value' )" ) or die(mysql_error());

    $meta_value  = $category->item(0)->nodeValue;
    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'category','$meta_value' )" ) or die(mysql_error());

    $post = $objDOM->getElementsByTagName("wp:postmeta");

        //Loop through the postmeta tags and add to table
        foreach( $post as $entry ) {
            $meta_key = $wp:postmeta = $entry->getElementsByTagName("wp:meta_key");
            $meta_value = $wp:postmeta = $entry->getElementsByTagName("wp:meta_value");

            $meta_key = $wp:postmeta->item(0)->nodeValue;
            $meta_value  = $wp:postmeta->item(0)->nodeValue;

            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( '$meta_key','$meta_value' )" ) or die(mysql_error());
        }

    $current_id = mysql_insert_id(); 

    else{
    //file didn't been upload properly
    echo "There was an error uploading the file, please try again!";
}

};

?>

Edited by pritaeas: Removed credentials

0

I have just written this, but it isn't doing anything. What is wrong with the code?

Getting any errors ? If not, add output at key places to determine where the code stops.

0

I've made some fixes. Everything works as expected, but at the "//Loop through the postmeta tags and add to table" point, it doesn't work. This section is not executing and nothing is getting added to the table.

<?php

//error display
error_reporting(E_ALL);
ini_set('display_errors', 1);    

$target_path = "temp/";

$target_path = $target_path . basename($_FILES['feed']['name']); 

if(move_uploaded_file($_FILES['feed']['tmp_name'], $target_path)) {

    $time = time();
    $rand = rand(100,500);
    rename("temp/".basename($_FILES['feed']['name']), "temp/".$time.$rand.".xml");

    $filename = $time.$rand.".xml";

    $objDOM = new DOMDocument();
    $objDOM->load("temp/".$filename);
    $item = $objDOM->getElementsByTagName("item"); 

    foreach( $item as $value ) {
        echo 'hello';
        //Get the value of the elements
        $title = $value->getElementsByTagName("title");


        $link = $value->getElementsByTagName("link");
        $post_name = $value->getElementsByTagName("post_name");
        $status = $value->getElementsByTagName("status");
        $category = $value->getElementsByTagName("category");
        $category = $value->getElementsByTagName("category");


        //Establish connection
        mysql_connect("localhost", "root", "password") or die(mysql_error());
        mysql_select_db("dbname") or die(mysql_error());


        //Assign values and insert into wp_postmeta table
        $meta_value = $title->item(0)->nodeValue;
        $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'title','$meta_value' )" ) or die(mysql_error());

        $meta_value  = $link->item(0)->nodeValue;
        $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'link','$meta_value' )" ) or die(mysql_error());

        $meta_value  = $post_name->item(0)->nodeValue;
        $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'post_name','$meta_value' )" ) or die(mysql_error());

        $meta_value  = $status->item(0)->nodeValue;
        $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'status','$meta_value' )" ) or die(mysql_error());

        $meta_value  = $category->item(0)->nodeValue;
        $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'category','$meta_value' )" ) or die(mysql_error());

        $post = $objDOM->getElementsByTagName("wp:postmeta");

            //Loop through the postmeta tags and add to table
            foreach( $post as $entry ) {
                echo 'in the loop';

                    $meta_key = $value->getElementsByTagName("wp:meta_key");
                    $meta_value = $value->getElementsByTagName("wp:meta_value");    

                    $meta_key  = $meta_key->item(0)->nodeValue;         
                    $meta_value  = $meta_value->item(0)->nodeValue;             

                $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( '$meta_key','$meta_value' )" ) or die(mysql_error());
            }

        $current_id = mysql_insert_id(); 

    }

}

?>

Edited by PBDeveloper

0

$post = $objDOM->getElementsByTagName("wp:postmeta");

Am not entirely sure, but for this to work I think the wp namespace needs to be added to the DOMDocument.

Edited by pritaeas

0

I've made some fixes. I've managed to add everything as I want to the database. But I expected the change in the wp_postmeta table to be reflected in the wp admin area. Guess I haven't added everything necessary for this to happen. If anyone knows about wordpress and what alterations are necessary on any of the tables in order for a post to appear under its post tab please let me know.

0

This is giving me error.Fatal error: Call to a member function item() on a non-object in C:\websites\WP\jobs\upload.php on line 53

What is wrong with it.

<?php

    //error display
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    $target_path = "temp/";

    $target_path = $target_path . basename($_FILES['feed']['name']); 

    if(move_uploaded_file($_FILES['feed']['tmp_name'], $target_path)) {

        $time = time();
        $rand = rand(100,500);
        rename("temp/".basename($_FILES['feed']['name']), "temp/".$time.$rand.".xml");

        $filename = $time.$rand.".xml";

        $objDOM = new DOMDocument();
        $objDOM->load("temp/".$filename);
        $item = $objDOM->getElementsByTagName("item"); 

        foreach( $item as $value ) {

            //Get the value of the elements
            $content_encoded = $value->getElementsByTagName("content_encoded");
            $excerpt_encoded = $value->getElementsByTagName("excerpt_encoded");
            $creator = $value->getElementsByTagName("creator");
            $title = $value->getElementsByTagName("title");
            $link = $value->getElementsByTagName("link");
            $post_name = $value->getElementsByTagName("post_name");
            $status = $value->getElementsByTagName("status");
            $category1 = $value->getElementsByTagName("category1");
            $category2 = $value->getElementsByTagName("category2");

            //Establish connection
            mysql_connect("localhost", "root", "password") or die(mysql_error());
            mysql_select_db("dbname") or die(mysql_error());

            //Assign values and insert into wp_postmeta table
            $creator = $creator->item(0)->nodeValue;
            $title = $title->item(0)->nodeValue;
            $excerpt_encoded = $excerpt_encoded->item(0)->nodeValue;
            $status = $status->item(0)->nodeValue;
            $content_encoded = $content_encoded->item(0)->nodeValue;



            $query = mysql_query("INSERT INTO wp_posts (post_author, post_title, post_content,to_ping, post_excerpt, post_status, comment_status, post_type, pinged,post_content_filtered) VALUES ( '1','$title','','','$excerpt_encoded','$status','open','post','','' )" ) or die(mysql_error());

            $meta_value = $title->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'title','$meta_value' )" ) or die(mysql_error());

            $meta_value  = $link->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'link','$meta_value' )" ) or die(mysql_error());

            $meta_value  = $post_name->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'post_name','$meta_value' )" ) or die(mysql_error());

            $meta_value  = $status->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'status','$meta_value' )" ) or die(mysql_error());

            $meta_value  = $category1->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'category','$meta_value' )" ) or die(mysql_error());

            $meta_value  = $category2->item(0)->nodeValue;
            $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( 'category','$meta_value' )" ) or die(mysql_error());


            $element = $objDOM->getElementsByTagName("postmeta");

                //Loop through the postmeta tags and add to table
                foreach( $element as $entry ) {
                    echo 'in the loop';

                        $meta_key = $entry->getElementsByTagName("meta_key");
                        $meta_value = $entry->getElementsByTagName("meta_value");   

                        $meta_key  = $meta_key->item(0)->nodeValue;         
                        $meta_value  = $meta_value->item(0)->nodeValue;             

                    $query = mysql_query("INSERT INTO wp_postmeta (meta_key, meta_value) VALUES ( '$meta_key','$meta_value' )" ) or die(mysql_error());
                }

            $current_id = mysql_insert_id(); 

        }

    }

    ?>


XML document is giving below:

<?xml version="1.0" encoding="UTF-8" ?>

<rss version="2.0"
    xmlns:excerpt="http://wordpress.org/export/1.1/excerpt/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.1/"
>

<channel>
    <title>WP</title>
    <link>http://localhost/WP/</link>
    <description>Just another WordPress site</description>
    <pubDate>Mon, 30 Jul 2012 08:53:47 +0000</pubDate>
    <language>en</language>
    <wp:wxr_version>1.1</wp:wxr_version>
    <wp:base_site_url>http://localhost/WP/</wp:base_site_url>
    <wp:base_blog_url>http://localhost/WP/</wp:base_blog_url>
    <generator>http://wordpress.org/?v=3.3.2</generator>


    <item>
        <title>IMPORT TEST 3</title> 
        <link>http://localhost/WP/IMPORT TEST/</link>
        <creator>admin</creator>
        <content_encoded><![CDATA[]]></content_encoded>
        <excerpt_encoded><![CDATA[]]></excerpt_encoded>
        <comment_status>open</comment_status>
        <ping_status>open</ping_status>
        <post_name>Import Item 3</post_name> 
        <wp:status>publish</wp:status>
        <wp:post_type>post</wp:post_type>
        <category1 domain="category" nicename="plumbing"><![CDATA[Plumbing]]></category1> 
        <category2 domain="category" nicename="news"><![CDATA[NEWS]]></category2>  
        <postmeta>
            <meta_key>_edit_last</meta_key>
            <meta_value><![CDATA[1]]></meta_value>
        </postmeta>
        <postmeta>
            <meta_key>_mf_write_panel_id</meta_key>
            <meta_value><![CDATA[4]]></meta_value>
        </postmeta>

        <postmeta>
            <meta_key>thumbnail</meta_key>
            <meta_value><![CDATA[decorating8.jpg]]></meta_value>
        </postmeta>
        <postmeta>
            <meta_key>content</meta_key>                          
            <meta_value><![CDATA[THIS PART IS TO BE FILLED WITH THE TEXT YOU WANT]]></meta_value>  
        </postmeta>
        <postmeta>
            <meta_key>_wp_old_slug</meta_key>
            <meta_value><![CDATA[ENTER A SLUG FOR THE PAGE.]]></meta_value>
        </postmeta>
        <postmeta>
            <meta_key>image_1</meta_key>
            <meta_value><![CDATA[decorating8.jpg]]></meta_value>
        </postmeta>
        <postmeta>
            <meta_key>image_2</meta_key>
            <meta_value><![CDATA[decorating9.jpg]]></meta_value>
        </postmeta>
        <postmeta>
            <meta_key>youtube_video_link</meta_key>
            <meta_value><![CDATA[]]></meta_value> 
        </postmeta>
    </item>

</channel>
</rss>
0

->item(0)->nodeValue

One of these is executed, but the variable is null (no value). You have no checks in place to validate the results.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.