使用外部数据更新自定义字段

时间:2014-12-12 作者:Hal Atkins

对于我们在WordPress网站上的文章,我们希望显示每周为每个手稿收集的文章分析。每个帖子都有这些本机自定义字段:

文章视图PDF下载PubMed Central Views(PubMed中心视图)文章引用数据(来自不同来源)每周收集到一个CSV文件中。我想每周运行一些脚本,以获取这些数据,并使用来自CSV文件的数据更新Wordpress数据库(在每篇文章中)中的本机字段。

有没有一种写剧本的方法可以做到这一点?

2 个回复
SO网友:karpstrucking

您可以使用PHP的fgetcsv()str_getcsv() 函数解析上载的CSV文件。您的CSV将需要包含一个带有帖子ID的列,以及与自定义字段名匹配的列。循环浏览CSV,并为每行更新该帖子的自定义字段,使用update_post_meta()

http://php.net/manual/en/function.fgetcsv.php

http://php.net/manual/en/function.str-getcsv.php

http://codex.wordpress.org/Function_Reference/update_post_meta

SO网友:Liz Eipe C

请参阅教程,其中解释了如何从CSV读取数据,以及如何创建和更新现有帖子。它还解释了如何更新acf字段。

http://www.pearlbells.co.uk/insert-udpate-wordpress-post-programmatically/

粘贴用于创建和更新帖子的代码。

function postExists($postCSVContent,$parentId , $mydb) {

$mydb->get_results($mydb->prepare(\'SELECT ID FROM `wp_posts` WHERE ID = %d\',$postCSVContent[0]));

if( $mydb->num_rows >  0) {

    echo \'Post \'.$postCSVContent[0].\' exist\'.PHP_EOL;
    $template_file = get_post_meta( $postCSVContent[0], \'_wp_page_template\', true );
    echo \'Template File : \'.$template_file.PHP_EOL;

    $updatePost = array(   
        \'ID\' => $postCSVContent[0],
        \'post_title\'    => $postCSVContent[\'1\'],
        \'post_content\'  => $postCSVContent[\'2\'],
        \'post_type\' => \'doors\',
        \'post_status\'   => \'publish\',
        \'post_author\'   => 1
    );

    wp_update_post( $updatePost );

    update_post_meta( $postCSVContent[0], \'_wp_page_template\', $template_file );
    updateAcf( $postCSVContent , $postCSVContent[0] );

}
else
{
    echo \'Post \'.$postCSVContent[0].\' is not existing\'.PHP_EOL;        
    echo \'Post parent \'.$parentId.PHP_EOL;

    $newIds = wp_insert_post( array(
            \'post_title\' => $postCSVContent[\'1\'],
            \'post_content\' => $postCSVContent[\'2\'],
            \'post_type\' => \'doors\',
            \'post_status\' => \'publish\',        
            \'post_author\'   => 1,
            \'post_parent\' => $parentId
    ));

    updateAcf( $postCSVContent , $newIds );
    return $newIds;

}

结束