我为我的公司构建了一个插件,基本上可以访问tube网站,从中获取内容,并在定义的任何状态(发布、草稿、未来等)自动发布。
现在,当我通过插件手动添加帖子时,一切都很顺利:它打开一个卷曲到站点,抓取视频并嵌入,获取缩略图,发布标题,完美无瑕。但是,当我尝试使用
add_action(\'timelyTube\', \'timelyPost\');
在激活挂钩上:
wp_schedule_event(time(), \'hourly\', \'timelyTube\');
它的工作原理是激发函数
timelyPost()
, 但当它去抓取视频时,它无法这样做,它会抓取缩略图&;标题,但不是嵌入,这意味着cURL正在工作,但在这个过程中有些东西被搞砸了。
如果有人知道该做什么,我会很感激,谢谢,Itai。
最合适的回答,由SO网友:Itai Sagi 整理而成
嗯,我已经找到了自己的解决方案,谢谢韦斯顿,但我相信我的解决方案更简单:)
从调用insert post的函数中,为了简单起见,可以执行以下操作:
kses_remove_filters();
wp_insert_post( $post );
kses_init_filters();
瞧!有一个新帖子。
SO网友:Weston Ruter
我刚刚遇到了同样的问题。我想做的是wp_insert_post()
在cron操作中,脚本显然会在save_post
操作处理程序。我找到了我的问题,结果是save_post
用于保存自定义元数据库中的POST数据的处理程序。在此处理程序中,它调用check_admin_referer( \'myplugin_save\', \'myplugin_nonce\')
作为安全检查。这个函数非常烦人地调用wp_die()
如果安全检查失败,那么执行就会停止。因此,如果DOING_CRON
然后一切按预期开始工作。请参见:
<?php
function myplugin_metabox_save(){
// If doing wp_insert_post() during a cron, the check_admin_referer() below
// will always fail and we know the metabox wasn\'t shown anyway, so abort.
if ( defined(\'DOING_CRON\') || isset($_GET[\'doing_wp_cron\']) ){
return;
}
// This is to get around the problem of what happens when clicking the "Add Post"
// link on the admin menu when browsing the main site.
if( $_SERVER[\'REQUEST_METHOD\'] != \'POST\' ){
return false;
}
// Verify this came from the our screen and with proper authorization
if ( !check_admin_referer( \'myplugin_save\', \'myplugin_nonce\') ) {
return false;
}
// ...
// Now handle $_POST fields and save them as postmeta for example
}
add_action( \'save_post\', \'myplugin_metabox_save\' );