如果发布自定义字段设置为 true,则这段代码应该设置发布数据,或者如果不是,则将发布状态设置为草稿。该动作需要在post_save
/post_updated
动作之后调用,因此我们的一所大学向我建议了这种方式(老问题:wordpress 在 'save_post' 动作中将 post_status 设置为“草稿”):
add_filter( 'wp_insert_post_data', 'set_post_parameters', 99, 2 );
function set_post_parameters( $data, $postarr ) {
if ( get_post_meta( $postarr['ID'], '_cs_tweet_ok_status', true ) == 'true' ) {
$data['post_date'] = get_post_meta( $postarr['ID'], '_cs_system_tweet_date', true );
$data['post_date_gmt'] = get_gmt_from_date( get_post_meta( $postarr['ID'], '_cs_system_tweet_date', true ) );
} else {
$data['post_status'] = 'draft';
}
return $data;
}
它会做它应该做的 - 它将发布日期设置为提供自定义字段(之前保存)的日期或将帖子设置为草稿。唯一的事情是,它在post-new.php
被调用时也会被触发,那些创建无法删除的“空”帖子(以防用户没有填写所有数据并且没有正确保存帖子)。我应该如何在该函数中创建一个“检查”,以便它仅在保存或更新帖子时运行?
我在设置post_data
功能方面也有一个小问题:
add_action( 'save_post', 'cs_twitter_save_meta' );
function cs_twitter_save_meta( $post_id ) {
if ( isset($_POST['post_type']) && 'tweets' == $_POST['post_type'] ) :
if ( isset($_POST['post_title']) ) :
$url = 'https://api.twitter.com/1/statuses/show.json?id='.$_POST['post_title'];
$json = @file_get_contents($url,0,null,null);
if ( $json != false ) {
$json_output = json_decode($json);
$post_date = date('c', strtotime($json_output->created_at));
$post_save_date = date('G:i - d M y', strtotime($json_output->created_at));
update_post_meta( $post_id, '_cs_tweet_content', $json_output->text );
update_post_meta( $post_id, '_cs_tweet_date', $post_save_date );
update_post_meta( $post_id, '_cs_system_tweet_date', $post_date );
update_post_meta( $post_id, '_cs_tweet_user', $json_output->user->screen_name );
update_post_meta( $post_id, '_cs_tweet_ok_status', 'true' );
} else {
update_post_meta( $post_id, '_cs_tweet_content', 'There is an error with tweet Api. Too many connections in one hour. Try again after 60 minutes' );
update_post_meta( $post_id, '_cs_tweet_ok_status', 'false' );
}
endif;
endif;
}
首次保存时出现问题。似乎add_filter( 'wp_insert_post_data', 'set_post_parameters', 99, 2 );
首先触发,没有看到 custom_meta 并将 post_status 设置为草稿。然后add_action( 'save_post', 'cs_twitter_save_meta' );
触发,但第一个脚本已经为时已晚。
所以另一个问题 - 我应该如何解决这种情况,所以首先正确设置所有数据: 1. 用户创建新的 custom_post_type。2. 输入推文id 导入,推送发布。3. 脚本检查它是否可以从 twitter api 获取数据 4. 如果可以,它会获取所有必要的数据,发布帖子并将其发布日期设置为推文的发布日期。5. 如果没有,它会显示有关错误的信息并设置post_status
为草稿。