我需要获取每个帖子的字数并根据该顺序显示帖子。我需要这个来识别字数最少的帖子并对它们进行处理。
到目前为止,我已经能够根据每个帖子的单词计数创建一个数组,并使用sort($wc, SORT_NUMERIC)
对它们进行排序。除此之外,我无法根据此订单显示帖子。
$args = array('post_type' => 'post', 'posts_per_page' => 20, 'post_status' => 'publish');
$results = get_posts($args);
$wc = array();
//$p_id = array(); //how do i use this ?
foreach($results as $r){
$wc[] = str_word_count( strip_tags( $r->post_content ));
//$p_id[] = $->ID; //how do i use this ?
}
sort($wc, SORT_NUMERIC);
您知道,我知道另一种选择,您将这些值保存为自定义元字段,然后显示'meta_value_num'
的帖子,但我不允许采取该路线。知道如何做到这一点? TIA。
这就是我一直在尝试这样的事情:但它不考虑post ids
。我想它需要像一个关联数组或其他东西。
foreach ($wc as $key => $val) {
echo $key.' => ' .$val . '<br>';
}
理想的结果看起来像这样,因为我还需要显示相关的帖子标题。
1. Post title => 369
2. Another post title => 548
3. Yet another title => 895
更新 - 它适用于已接受答案中提供的解决方案。如果你能提出更好的解决方案,请写下答案。
答案 0 :(得分:2)
不需要有一个字数组和一个按其索引映射的帖子标题数组。您可以创建一个由post title索引的数组,并将count作为值,然后使用asort
按数值对数组进行排序,同时保持索引:
$args = array( 'post_type' => 'post', 'posts_per_page' => 20, 'post_status' => 'publish' );
$results = get_posts( $args );
$posts = array();
foreach ( $results as $result ) {
$posts[ $result->post_title ] = str_word_count( strip_tags( $result->post_content ) );
}
asort( $posts, SORT_NUMERIC );
die( print_r( $posts ) );
如果您想以相反的顺序对数组进行排序,则只需使用arsort
代替asort
答案 1 :(得分:1)
我认为$ wc应该是一个带有“title”和“words of words”的多维数组,然后你可以使用array_mulisort。 尝试这样的想法:
foreach($results as $r){
$wc[] = array('title' => $r->post_title, 'nb_words' => str_word_count( strip_tags( $r->post_content )));
}
foreach($wc as $key => $post) {
$nb_words[$key] = $post['nb_words'];
$title[$key] = $post['title'];
}
array_multisort($nb_words, SORT_ASC, $title, SORT_ASC, $wc);
更新 - 这是使用array_multisort的更短更好的方法:
$args = array('post_type' => 'post', 'posts_per_page' => 20, 'post_status' => 'publish');
$results = get_posts($args);
$nb_words = array();
$title = array();
foreach($results as $r){
$nb_words[] = str_word_count( strip_tags( $r->post_content ));
$title[] = $r->post_title;
}
array_multisort($nb_words, SORT_ASC, SORT_NUMERIC, $title);
for ($i = 0; $i < sizeof($title); $i++) {
echo $title[$i] . ' => ' . $nb_words[$i] . '<br>';
}