对POST查询结果中的单词实例计数

时间:2021-05-10 作者:Lorn Waterfield

我对这件事感到非常困惑,不知道是否有人能告诉我哪里出了问题。

我正在为查询的结果帖子获取一些authormeta,我想统计某些authormeta在这些结果中重复的次数。

E、 g.有10个“配方”帖子>;每个帖子的作者(每个帖子不同)都有一个“最喜欢的食物”元项目>;我希望结果类似于;3位食谱作者将“馅饼”作为他们最喜欢的食物;。

这是我到目前为止所做的,这让我很接近,但我需要$authorfood的结果用于$text,但它似乎只适用于纯文本语句?

$the_query = new WP_Query( array( \'post_type\' => \'recipe\', \'posts_per_page\' => -1 ) );
 if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) :
   $the_query->the_post();
   $authorfood = get_the_author_meta( \'favourite_food\' ); // the result of this is the plain list I want to use later, e.g. "appleappleappleapplebananapiepiepie"
   $text = "Plain text to count frequency of words"; // this needs to be the result of $authorfood above
   $words = str_word_count($text, 1);
   $word_frequencies = array_count_values($words);
   arsort($word_frequencies);
   print_r($word_frequencies);
  endwhile;
 endif;
我可能是完全错了。很抱歉问了这么愚蠢的问题,但我已经搜索了又搜索,找不到答案。

你知道我如何统计“食谱作者”最喜欢的食物的数量吗(必须是那些帖子作者,而不是网站上的所有作者,因为有多种帖子类型)?

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

我从你的问题中了解到,你想:

计算某个用户元字段中的单词在查询的所有元结果中重复的次数

实现这一点的一种方法是将所有元值放在一个字符串中,然后计算新字符串中重复的单词。

// Create a string with all favorite foods
$all_favorites = \'\';
while($the_query->have_posts()){
    $the_query->the_post();
    $authorfood = get_the_author_meta(\'favourite_food\');
    if(strlen($authorfood)>0){
    $all_favorites .= \' \'.$authorfood;
    }
}

// Count
$words = explode(\' \', $all_favorites);
$counts = array();
foreach($words as $word){
    $word = preg_replace("#[^a-zA-Z\\-]#", "", $word);
    $counts[$word] += 1;
}
然后$counts 变量将是具有以下结构的数组(key) "food" => (value) count 对于出现在您网站的favourite_food 用户元值。

Note: 一旦你接触到大量用户,这将变得很沉重。更好的方法是将用户最喜欢的食物(或食物)保存为具有唯一ID的独立实体,这样您就可以轻松地进行计数。

相关推荐

Wp_count_post()的数字格式

我正在尝试在我的网站标题中格式化我的帖子我的总帖子数。我有数字在那里,但希望它的格式与逗号,如1500,而不是1500。我知道这可能是非常基本的,但我仍在学习。。任何帮助都将不胜感激。干杯功能。phpfunction wpb_total_posts() { $total = wp_count_posts()->publish; echo \'\' . $total; } 标题。php<?php wpb_total_posts(); ?>