Query posts by content lenght

时间:2014-03-22 作者:Tony Fire

我使用下面的代码每6小时随机发布一篇我的网站帖子。

if ( false === ( $social_trans_post_id = get_transient( \'$social_trans_post_id\' ) ) ) {
                $args = array(\'numberposts\' => 1, \'orderby\' => \'rand\');
                $social_trans = get_posts($args);
                set_transient(\'$social_trans_post_id\', $social_trans[0]->ID, (60*60*6));
            } else {
                $args = array(\'post__in\' => array($social_trans_post_id));
                $social_trans = get_posts($args);
            }
为了与Twitter集成,我只想拉140个字符或更少的帖子。

我知道<?php echo substr(($post->post_content), 0,140); ?> 我已经在使用它作为临时解决方案。

我试图设置一个条件,这就是我被卡住的地方:

if ( false === ( $social_trans_post_id = get_transient( \'$social_trans_post_id\' ) ) ) {
                $args = array(\'numberposts\' => 1, \'orderby\' => \'rand\');
                $social_trans = get_posts($args);
                        if (strlen( $social_trans->post_content > 140 ) ) {
                           // Pull another post? 
                        }
                set_transient(\'$social_trans_post_id\', $social_trans[0]->ID, (60*60*6));
            } else {
                $args = array(\'post__in\' => array($social_trans_post_id));
                $social_trans = get_posts($args);
            }

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

我想建议你另一种方法。

如果帖子的内容少于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内容长度的帖子的元数据。

结束

相关推荐

Ajax, jQuery and Wordpress

我很难让AJAX和jQuery与WP一起工作,我想知道是否有人能为我指明正确的方向。我有一个表单,我想将表单中的数据传递给PHP函数,在那里返回数据,然后<div> 使用PHP函数处理的数据创建。我有一个版本在WP之外工作,但我似乎无法移植它。我已经学习了很多教程,但似乎什么都不管用。我有下面的代码,它应该简单地用表单中的数据创建一个警报窗口,并在前面加上“hello”,但JS函数从未被调用过。它不断增加?name=name 到页面URL。我还尝试创建一个单独的JS文件,并用..加载脚本。。w