How to insert data into a wordpress table using a custom function

I have a wordpress app hosted on Azure, and I need to insert data into the wp_posts table, using a custom function since I’m running this script as a background job and I cannot use wordpress functions since the script is not on the wordpress folder.

I’ve tried:

Read More
mysql_query("INSERT INTO wp_posts(post_title, post_content, post_status, post_type, comment_status, page_template), VALUES($title, $sum, 'publish', 'post', 'closed', 'content.php')");

But I get the following error: PHP Warning: mysql_query(): An attempt was made to access a socket in a way forbidden by its access permissions.

The log file is as follows:

[04/07/2014 09:51:47 > adf9f5: SYS INFO] Status changed to Initializing
[04/07/2014 09:51:47 > adf9f5: SYS INFO] Run script 'data.php' with script host - 'PhpScriptHost'
[04/07/2014 09:51:47 > adf9f5: SYS INFO] Status changed to Running
[04/07/2014 09:51:48 > adf9f5: ERR ] PHP Warning:  mysql_query(): An attempt was made to access a socket in a way forbidden by its access permissions.
[04/07/2014 09:51:48 > adf9f5: ERR ]  in C:DWASFilesSitesabacuskenyaTempjobstriggeredyrdksuocv.xbxdata.php on line 50
[04/07/2014 09:51:48 > adf9f5: ERR ] PHP Warning:  mysql_query(): A link to the server could not be established in   C:DWASFilesSitesabacuskenyaTempjobstriggeredyrdksuocv.xbxdata.php on line 50
[04/07/2014 09:51:48 > adf9f5: ERR ] PHP Warning:  mysql_insert_id(): An attempt was made to access a socket in a way forbidden by its access permissions.

How do I get my script to insert data into that table using a custom function other than wordpress’s wp_insert_post

My data.php is as follows:

<?php
define('DB_NAME', '**********');
define('DB_USER', '********');
define('DB_PASSWORD', '**************');
define('DB_HOST', '*******');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if(!$db_selected){
    die('Cannot use '. DB_NAME . ': ' .mysql_error());
}
$pages = array("page0", "page1", "page2", "page3", "page4");
    foreach($pages as $page){
        $json_feed = "http://digitalrand.net/api/url_data/?key=*****&pass=*****%&".$page;
        $json = file_get_contents($json_feed);
        $obj = json_decode($json, true);
            foreach($obj as $article_array){

            $url = $article_array['url'];
            $domain = $article_array['domain'];
            $favicon = $article_array['favicon'];
            $title = $article_array['title'];
            $category = $article_array['category'];
            $large_summary = $article_array['summary'];
            $sum = implode(',',$large_summary);
            $images = $article_array['images'];

            $image_array = reset($images);
            $image = $image_array["image"];

            $sql = "INSERT INTO wp_posts(post_title, post_content, post_status, post_type, comment_status, page_template), VALUES($title, $sum, 'publish', 'post', 'closed', 'content.php')";
            echo $sql;

            mysql_query($sql);

            $post_id = mysql_insert_id();
            echo "The Post ID is " . $post_id . "<br>";

            $data = array($favicon, $domain, $image);

            $value = implode(',',$data);


            //$a = add_post_meta($post_id, 'post_favicon_domain_image', $value, true);
            $sql2 = "INSERT INTO wp_postmeta(post_id, meta_key, meta_value), VALUES($post_id, 'post_favicon_domain_image', $value)";
            mysql_query($sql2);
            //echo $a;
            }
    }

Related posts

Leave a Reply

2 comments

  1. You should be able to use $wpdb.

    This article explains how you can access the wordpress database from outside a WordPress build.

    http://www.stormyfrog.com/using-wpdb-outside-wordpress/

    Then you can use $wpdb to carry out your SQL in a custom function.

    <?php 
      global $wpdb;
    
      $table = 'wp_posts';
    
      $data  = array(post_title=>$post_title, post_content=>$post_content, post_status=>$post_status, post_type=>$post_type, comment_status=>$comment_status, page_template=>$page_template);
    
      $wpdb->insert( $table, $data);
    ?> 
    

    WPDB reference:

    https://codex.wordpress.org/Class_Reference/wpdb

  2. I suggest you to create any content on wordpress by using WP API. It can be anywhere you want. If you insert data to wp db manually, your system may not work well. For example, when you create a post, it sends an email. If you insert db manually, this does not work. Instead of that, you can use WP API like below;

    class WPClient {
    
        var $xmlRpcUrl = "";
        var $username  = "";
        var $password = "";
    
        public function __construct($xmlrpcurl, $username, $password) {
            $this->xmlRpcUrl = $xmlrpcurl;
            $this->username  = $username;
            $this->password = $password;
        }
    
        function sendRequest($requestname, $params) {
            $request = xmlrpc_encode_request($requestname, $params);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
            curl_setopt($ch, CURLOPT_URL, $this->xmlRpcUrl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 1);
            $results = curl_exec($ch);
            curl_close($ch);
            return $results;
        }
    
        function createPost($title, $body, $category, $keywords = '', $encoding='UTF-8') {
    
            $title = htmlentities($title, ENT_NOQUOTES, $encoding);
            $keywords = htmlentities($keywords, ENT_NOQUOTES, $encoding);
    
            $postData = array(
                'title' => $title,
                'description' => $body,
                'mt_allow_comments' => 0,  // If 1 => allow comments
                'mt_allow_pings' => 0,  // If 1 => allow trackbacks
                'post_type' => 'post',
                'mt_keywords' => $keywords,
                'categories' => array($category)
            );
            $params = array(0, $this->username, $this->password, $postData, true);
    
            return $this->sendRequest('metaWeblog.newPost', $params);
        }
    }
    

    And usage;

    $wpClient = new WPClient("http://yourdomain.com/xmlrpc.php", "your_username", "your_password");
    $wpClient->createPost("Your title", "Your Content", "Post category", "your tags");