我想建议你另一种方法。
如果帖子的内容少于140个字符,则可以在保存帖子时设置一个元,这样就可以简单地运行一个简单的元查询。
add_action( \'save_post_post\', function( $id, $post ) {
if ( $post->post_status !== \'publish\' ) {
return;
}
if ( strlen( $post->post_content ) <= 140 ) {
update_post_meta( $id, \'_under_140\', 1 );
}
}, 10, 2 );
之后,您的代码会变成:
function get_social_trans_post() {
$social_trans_post = get_transient( \'social_trans_post\' );
if ( empty( $social_trans_post ) ) {
$args = array( \'posts_per_page\' => 1, \'meta_key\'=>\'_under_140\', \'orderby\'=>\'rand\' );
$social_trans_posts = get_posts( $args );
if ( ! empty( $social_trans_posts ) ) {
$social_trans_post = $social_trans_posts[0];
set_transient( \'social_trans_post\', $social_trans_post, 6 * HOUR_IN_SECONDS );
}
}
return $social_trans_post;
}
你需要的地方打电话就可以了
get_social_trans_post()
.
值得注意的是,我在瞬态中保存了整个帖子,而不仅仅是id,这样就不需要在获取id后查询帖子。所有序列化/非序列化工作都是由WordPress完成的,您得到的正是您存储的内容。
当然,这段代码将适用于您添加或添加后更新的帖子,但您可以运行run once脚本来设置最近具有wantend内容长度的帖子的元数据。