在WordPress网站上执行两次MySQL查询

时间:2014-07-08 作者:Manuel Ragazzini

我为我的英语感到抱歉。我试图在我的Wordpress网站上添加一些功能,为此,我在我的功能中添加了一个功能。php主题。其思想是在自定义表中保存一些数据,并为自定义表中添加的任何元素创建wp\\u post。

我以这种方式钩住了函数:

add_action ( \'init\', \'inserimentoAutoDatabase\' );
问题是,在执行该函数时,将数据保存在自定义表中并创建新post的查询会执行两次。我报告我的代码:

function inserimentoAutoDatabase(){

    //get datas from an xml file
    $result = fetchData("http://dealer.drivek.it/myPortalXML/index?myPortalXMLkey=d660d1e9-8c1d-41ff-8f54-0829777a9960");

    //save the xml  
    $fp = fopen(\'autodealerk-1.xml\', \'w+\');
    fwrite($fp, $result);
    fclose($fp);

    //load xml file
    $xml=simplexml_load_file("autodealerk-1.xml");

    $i=0;

    //start parsing xml content
    foreach($xml->car as $auto)
    {
        //this echo is executed only once
        echo ("test");

        //not important for the question | checks some content
        if($auto->km == null || $auto->km  == \'\'){
            $kilometri = "nuova";
            $anno_registrazione = "-";
        }else{
            $kilometri = $auto->km;
            $anno_registrazione = $auto->registrationDate;
        }

        $inevidenza = 0;
        if($auto->tractionType){
            $inevidenza = 1;
        }


        // create an array for the query
        $insData = array(
            \'id\' => $auto[\'id\'],
            \'make\' => (string) $auto->make,
            \'model\' => (string) $auto->model,
            \'version\' => (string) $auto->version,
            \'bodyType\' => $auto->bodyType,
            \'fuelType\' => $auto->fuelType,
            \'type\' => $auto->type,
            \'dealer_name\' => (string) $auto->dealer->name,
            \'gear_gearType\' => (string) $auto->gear->gearType,
            \'tractionType\' => $auto->tractionType,
            \'kw\' => $auto->kw,
            \'doors\' => $auto->doors,
            \'seats\' => $auto->seats,
            \'emissionClass\' => $auto->emissionClass,
            \'prices_listPrices\' => $auto->prices->listPrice,
            \'exterior_color_paint\' => $auto->exterior->color . " " . $auto->exterior->paint,
            \'km\' => $kilometri,
            \'typewarrantyMonths\' =>  $auto->warranty->type . " " . $auto->warranty->warrantyMonths,
            \'equipments\' => "equipaggiamenti",
            \'media\' => $auto->image,
            \'description\' => $auto->description,
            \'registrationDate\' => $anno_registrazione
        );

        $wpdb->insert(\'auto_importate\', $insData);


        // define the post
        $my_post = array(
          \'post_title\'    => (string) $auto->make . (string) $auto->model . (string) $auto->version,
          \'post_content\'  => $auto->description,
          \'post_status\'   => \'publish\',
          \'post_author\'   => 1,
          \'post_type\'     => "vehicles"
        );

        // ***** post is created twice
        $post_id = wp_insert_post( $my_post );


        //i break the cycle **** only for test
        $i++;
        if( $i == 1 ) break;

    }
}
正如您在下面cicle末尾的图像中所看到的(在第一次执行后中断),我预计只有一个元素,但有两个。

auto_importate table

auto_importate table content

有人能帮我吗???你知道这个问题吗?

提前谢谢。

2 个回复
SO网友:eyoung100

使用wpdb->insertwp_insert_post 两者都完成了SQL插入,这就是为什么每次都会看到2条记录。必须只使用一个insert方法的实例,然后传递$my_postWP_Query

CLARIFICATION

正如米洛在评论中指出的那样wpdb->insert 将插入到任何表中,而wp_insert_post 用于将帖子插入wp\\U posts表。wpdb->insert 主要用于自定义表。

在您的情况下:

<?php $wpdb->insert( \'auto_importare\', $insData); ?> 
坚持将$wpdb用于自定义表的前提,然后使用wpdb->get_results 要选择刚插入的数据,请执行以下操作:

<?php $post_results -> $wpdb->get_results( \'SELECT make,model, version,description FROM wpdb->auto_importare\'); ?> 
最后,我暂时没有想到这一部分,您可以根据$post_results

看见The WordPress Codex: wpdb

SO网友:Tom J Nowell

您不必检查工作是否已经完成。因此,在每一个页面上加载的工作将再次完成,并创建更多的帖子。

因此,当WordPress尝试运行WP Cron时,您将获得第二次加载和第二次运行代码。

因此,不要通过init钩子在每次页面加载时都运行此操作。获取的URL需要很长时间才能返回整个页面,因此您的网站运行速度非常慢。

而是:

在定期运行的cron作业中运行此操作,插入前检查是否已创建帖子。也许通过查询auto_importate 表以查看具有该ID的汽车是否已存在auto_importate 表中,请改用自定义字段/post meta。您可能还想获得一个新的门户密钥,因为您已经发布了它,所有人都可以在您的问题中看到它

结束

相关推荐

WordPress脚本加载/卸载--wp_deregister_script(‘jQuery’)

我有几个关于WordPress加载/卸载javascript工具的问题。在阅读了彼得·古森(PieterGoosen)对一个问题的漂亮书面回复后,我开始了一些研究,并清理了我用来加载库的代码。此代码来自my child主题的函数。php文件。我的网站上有一些使用datepicker日历工具的功能。此外,我确信还有一些插件使用jQuery。function jquery_loadup() { //wp_deregister_script(\'jquery\'); <---