通过XML文件动态创建帖子

时间:2016-08-22 作者:Radizzt

我是wordpress/php新手,我正在尝试通过xml文件动态创建新帖子。

我正在使用的xml是one.

文件在白天以FILO的方式定期更新(在顶部添加新项目,在底部推出新项目),现在我们有人通过在每个项目中获取一些价值,每隔几个小时手动创建新帖子。

所以我想知道的是,我是否可以自动化这个过程?

每当更新此文件时。Wordpress将仅使用新项目创建新帖子。

我能够从xml文件中提取值,但我在动态创建帖子和设置帖子时遇到了问题,因此它只会创建新的项目,所以我不会有任何重复项。

此外,我不确定这是否会影响大部分代码,但我正在使用ACF 插件,因此帖子中也有一些自定义字段。

提前谢谢。

2 个回复
SO网友:jdm2112

对根据您的描述,自动化此过程的所有要求似乎都已到位。

数据通过XML提供,XML可以用PHP解析为必要的标题、正文和元组件。[search]

WordPress支持编程的后期插入/删除/编辑功能,因此该部分相当简单。[WP Codex]

现在您只需要一个PHP开发人员就可以将代码编写到您的规范中。

SO网友:Radizzt

我找到了如何动态创建帖子的方法。我不知道这是否是最佳的,但它完成了工作。

我将所有必要的信息放入变量/数组中,并将它们添加到执行插入的for循环中。它会遍历整个xml文件,但如果遇到具有相同标题的帖子(我知道这可能不是最好的唯一标识符),它会停止并跳出循环,这样就不会创建多个相同的帖子。一旦中断,它会告诉用户创建了多少帖子:

$flag = true;
for($i=0; $i<24; $i++){
if(!get_page_by_title($b[$i]->title, OBJECT, post)){

    //check what category it\'s in.
    if(stristr($feedKeywordsArray[$i],"news")){
        $category = 3;
    }
    elseif(stristr($feedKeywordsArray[$i], "live")){
        $category =4;
    }
    elseif(stristr($feedKeywordsArray[$i], "insider")){
        $category =5;
    }
    elseif(stristr($feedKeywordsArray[$i], "local")){
        $category =6;
    }
    elseif(stristr($feedKeywordsArray[$i], "spotlight")){
        $category =7;
    }
    else{
        $category=1;
    }

    $my_post = array(
        \'post_title\'    => $b[$i]->title,
        \'post_content\'  => $b[$i]->description,
        \'post_status\'   => \'publish\',
        \'post_author\'   => 1,
        \'post_category\' => array($category),
        \'tags_input\' => $feedKeywordsArray[$i]
    );

// Insert the post into the database.
    $post_id = wp_insert_post( $my_post );
    echo "<h1> Post: \'" . $b[$i]->title . "\' added</h1>";

    if($post_id>0){
        update_field(\'excerpt\', (string)($b[$i]->description), $post_id);
        update_field(\'vamp-thumbnail\', (string)($thumbnail[$i]), $post_id);
        update_field(\'vamp-video\', str_replace("#autostart=on;", "#autostart=off;hidecompanion=on;autoadv=off;",(string)($a[$i][0])), $post_id);

    }
}
else{
    $flag = false;
    echo "<h2> Coming Out of the for loop after creating " . $i . " successful post(s).</h2>";
    break;
}
}

if($flag){
echo "Created all post";
}

?>