Pergunta

I need to create wordpress posts using wp_insert_post, and fill "post_title" and "post_content" with values queried from an external (not wordpress) database. No matter what I try, I still get the same error.

Wordpress Database Error: database_name.wp_phppc_functions' doesn't exist]
SELECT * FROM `wp_phppc_functions` WHERE `id` = 31

I have tried the following code as a plugin, inserting into functions.php and as a standalone file but I get the same error. For some reason, the site still thinks it is in the other database? Any help you can give me would be much appreciated!

$conzz = mysql_connect("localhost","username","password");


if (!$conzz) {


  die('Could not connect: ' . mysql_error());


}

mysql_select_db("database_name", $conzz);

$resultzz = mysql_query("SELECT T1.ID, REBATE_CODE, LONG_DESC, INCENT_TECH_ID, UPGRADE_TECH FROM T_L_INCENTIVES T1 INNER JOIN T_L_INCENT_TECH T2 ON T1.L_INCENT_TECH = T2.ID INNER JOIN T_LIGHTING_TYPE T3 ON T2.E_LIGHTING_TYPE_ID = T3.ID");

while($row = mysql_fetch_array($resultzz)) {

$new_post = array(
'post_title' => $row['REBATE_CODE'] ,
'post_content' => $row['LONG_DESC'] ,
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(10)
);


$conzzz = mysql_connect("localhost","username","password","wordpress_database");

if (!$conzzz) {

die('Could not connect: ' . mysql_error());


}
mysql_select_db("wordpress_database", $conzzz);

wp_insert_post( $new_post ); 
}
?>
Foi útil?

Solução

The error you are getting is not related to your plugin, it is the PHP Code for Posts plugin that is missing a table - you should disable or delete this plugin. See the code for it with the table name in this file: http://plugins.svn.wordpress.org/php-code-for-posts/tags/1.2.0/PHPPostCode.php

That said, you do have issues with your plugin as well. You should not use the mysql_* extensions both because they have been deprecated and because they are not the correct way to access the database using WordPress. The proper way to do this would be to use the global variable $wpdb which abstracts a lot of the database work away from your plugin. A better way to implement your code using the recommended WordPress functions...

global $wpdb;

$sql = <<<SQL
SELECT T1.ID, REBATE_CODE, LONG_DESC, INCENT_TECH_ID, UPGRADE_TECH 
FROM T_L_INCENTIVES T1 
INNER JOIN T_L_INCENT_TECH T2 
    ON T1.L_INCENT_TECH = T2.ID 
INNER JOIN T_LIGHTING_TYPE T3 
    ON T2.E_LIGHTING_TYPE_ID = T3.ID
SQL;

$rebates = $wpdb->get_results( $sql );
foreach ( $rebates as $rebate ){
    $new_post = array(
        'post_title' => $rebate->REBATE_CODE,
        'post_content' => $rebate->LONG_DESC,
        'post_status' => 'publish',
        'post_date' => date('Y-m-d H:i:s'),
        'post_author' => $user_ID,
        'post_type' => 'post',
        'post_category' => array(10)
    );
    if ( 0 == ( $post_id = wp_insert_post( $new_post ) ) ){
        // an error occurred and $post_id == 0
    } else {
        // the new post_id is $post_id
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top