从与当前用户共享相同自定义用户元的其他用户获取所有结果

时间:2021-02-28 作者:Davey

我对扩展wordpress还很陌生,并尝试使用Mysql和PHP将数据提取到html表中并将其打印到wp页面上。到目前为止,我所做的是通过匹配表wp\\U testing\\u data中的score和max\\u score列的结果,获取所有表单数据以显示通过或失败

这是一个棘手的部分,我无法找到如何进行查询的任何细节。如果当前用户访问带有html表输出的页面,我希望它只显示来自其他用户的条目,这些用户在wp\\u usermeta表中与当前用户具有相同的site\\u id

理论上,查看页面的用户在DE49的wp\\u usermeta表中有一个site\\u id条目。现在,我只想在结果来自其他用户且site\\u id值等于当前用户site\\u id值时显示“通过”或“失败”结果表。site\\u id对于一组用户来说是唯一的,因此将实际结果(DE49)作为目标并不是答案。对于当时查看页面的用户(当前用户),它需要是动态的。基本上,您只能看到自己组成员的结果。在这种情况下,组存储在wp\\u usermeta表的site\\u id列中。我可以使用下面的方法获得所有结果,但无法确定只从与当前用户具有匹配元值的用户那里获得结果。是否有人知道如何编写查询,将上述条件添加到我在下面使用的查询中,以仅获取过滤后的数据?

global $wpdb;
$result = $wpdb->get_results( "SELECT f_name, l_name, date, IF(score = max_score, \'PASSED\',\'FAILED\') AS score 
FROM wp_testing_data, wp_usermeta
WHERE wp_usermeta.meta_key = \'site_id\'
AND wp_usermeta.meta_value = \'DE49\'");

echo "<style>";
echo "body {font-family: Arial;}";

echo ".table_container { padding: 10px 12px 0px 12px;  border: 1px solid #ccc;  }";
echo ".table_container th { background-color:lightblue; color:#000; font-weight:bold; border-left: 1px solid white;}";
echo "</style></head>";
echo "<body>";

echo "<div class=\\"table_container\\"><table>";
echo "<tr><th style=\\"padding-left:10px;\\">First Name</th><th>Last Name</th><th>Date</th><th>Score</th></tr>";
foreach ($result as $row) {
    echo "<tr><td>" . $row->f_name. "</td><td>" . $row->l_name . "</td><td>" . $row->date . "</td><td>" . $row->score. "</tr>";
}
echo "</table></div>";
Screenshotenter image description here如果您有任何指导或粗略的想法,我们将不胜感激,并感谢您抽出时间阅读我的帖子。

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

您可以使用get_current_user_id 获取当前查看页面的用户的id,以及get_user_meta 获取与该用户关联的site\\u id。例如:

<?php

$user_id = get_current_user_id();
$site_id = get_user_meta($user_id, \'site_id\', true);
注意:这确实假设有用户登录,如果没有,您可能会得到意外的结果。因此,假设您还没有这样做,请确保该页面只能由登录的用户查看。

要使用此site\\u id获取每个“site”的分数,可以使用LEFT JOIN. 您可以使用的查询是:

$result = $wpdb->get_results("SELECT f_name, l_name, IF(tdata.score = tdata.maxscore, \'PASSED\', \'FAILED\') as score FROM wp_usermeta umeta LEFT JOIN wp_testing_data tdata ON tdata.user_id = umeta.user_id WHERE umeta.meta_key = \'site_id\' AND umeta.meta_value = \'" . $site_id . "\'");
请注意,这将为具有与$site\\u id相关联的site\\u id的每个用户提供查询结果,即使wp\\u testing\\u数据中没有相应的结果。如果您只想要那些有测试数据的,请使用内部连接而不是左连接。

相关推荐

如何让WordPress在BULK_DELETE后刷新wp_list_table

我有一个正在运行的wp\\U list\\U表,即-我可以向表中添加记录、删除单个记录、编辑单个记录和删除批量记录。只有一个问题。批量删除后,删除的记录仍显示在列表中。当我刷新页面时,它们就消失了。令人困惑的是,记录的计数是正确的。任何帮助都将不胜感激。这是我的process\\u bulk\\u action函数。谢谢 public function process_bulk_action() { global $wpdb; $table = $wpdb->p