我正在为我的WordPress示例使用“时事通讯插件”。为了查看每个用户被分配到的时事通讯列表,我在列表应该被列出的用户表中添加了一列。到目前为止,这是有效的。现在我想在上面添加一个自定义过滤器来只查询特定列表中的用户,并按字母顺序排序新列
我设法在上面添加了一个新的过滤器
add_action( 'manage_users_extra_tablenav', 'render_custom_filter_options' );
function render_custom_filter_options() {
// Get the Newsletter instance to receive the subscribers and list names
$newsletter = Newsletter::instance();
$subscriber = $newsletter->get_user(get_userdata($user_id)->user_email);
$lists = get_option("newsletter_subscription_lists");
// Remove additional array entries
$pattern = "/list_[0-9]+$/";
foreach ($lists as $key => $entry) {
if(!preg_match($pattern,$key) || empty($entry)) {
unset($lists[$key]);
}
}
?>
<form method="GET">
<select name="group">
<option value="">Gruppen filtern</option>
<?php foreach ( $lists as $value => $label ): ?>
<option value="<?php echo esc_attr( $value ); ?>" <?php if (isset($_GET["group"]) && $value == $_GET["group"]) {echo "selected";} ?>><?php echo esc_html( $label ); ?></option>
<?php endforeach; ?>
</select>
<input type="submit" class="button" value="Filter">
</form>
<?php
}
当然,这本身并不能过滤任何东西,所以我需要添加一个用户查询,但据我所知,我只能从usermeta表中查询值。
订阅用户在数据库表“wp_newsletter”中,可以通过email地址或userid进行匹配,用户被分配到的列表是该表中的列,即“list_1”=〉1;“列表_2”=〉0。
如果列表没有保存在usermeta中,有没有办法编写一个wp用户查询来只返回特定列表中的用户?列可以按字母顺序排序吗?
非常感谢!
1条答案
按热度按时间wgeznvg71#
要根据某个表中的自定义值对WordPress用户表进行过滤和排序,您需要使用自定义查询并根据一个公共值将表连接在一起。在这种情况下,您可以根据用户的电子邮件地址或用户ID将
wp_users
表与wp_newsletter
表连接在一起。此筛选器根据用户的电子邮件地址或用户ID联接
wp_users
和wp_newsletter
表。然后添加查询条件以筛选指定的组,并按用户列(列表名称)升序排序结果,后跟用户的显示名称。