这是我花了太多时间研究的问题之一,可能有一个我错过的非常简单的解决方案。任何帮助都将不胜感激。
我试图用自定义数据中的名称填充选择框(meta_key
“”pyd_pub_author
)但是,我不能直接调用数据,因为它还需要确保"pyd_pub_type" = "Newsletter"
这个meta_value
对于meta_key "pyd_pub_type"
需要是"Newsletter"
作者的名字必须来自meta\\u key“pyd_pub_author
“棘手的是,还有很多其他的”pyd_pub_authors
“与其他关联的”pyd_pub_type
“,我也需要过滤掉它们。
因此,我需要过滤掉meta\\u值“Newsletter
“和所有”pyd_pub_author
“与之关联的。
我所做的是:
$metakey = $prefix . \'pub_author\';
$authors_query = $wpdb->get_col(
$wpdb->prepare(
"SELECT DISTINCT meta_value, post_id
FROM $wpdb->postmeta
WHERE meta_key = %s
HAVING post_id = ANY (
SELECT DISTINCT post_id
FROM $wpdb->postmeta
WHERE meta_value = \'Newsletter\'
)
", $metakey
)
);
这将返回与列表匹配的每个post\\u id的作者名称,即使它们是重复的。“DISTINCT”没有过滤名称,因为它正在检查post\\u id。
因此,我要做的就是运行一个array\\u unique()来去除重复项。这是可行的,但必须有一种更简单、更便宜的方法来做到这一点。
头->桌子,头->桌子,头->桌子。。。
最合适的回答,由SO网友:mgyura 整理而成
我在上面的查询中发现了错误。也许还有更好的方法可以做到这一点,谢谢凯撒,我会在完成更多研究后更新。我忘了做的是GROUP\\u CONCAT另一个meta\\u值,这样我可以提取不同的位。它似乎比需要的时间还要长,但它很快就完成了任务。这是代码,只需将其包装成一个表单并选择,您就可以通过几个过滤器下拉出唯一的meta\\u值。
$metakey = $prefix . \'pub_author\';
$authors_query = $wpdb->get_col(
$wpdb->prepare(
"SELECT meta_value, post_id, GROUP_CONCAT(meta_value)
FROM pyd_postmeta
WHERE meta_key = %s
GROUP BY meta_value
HAVING post_id = ANY (
SELECT post_id
FROM pyd_postmeta
WHERE meta_value = \'Newsletter\'
)
", $metakey
)
);
if ( $authors_query ) {
foreach ( $authors_query as $author ) {
?>
<option value="<?php echo $author ?>" <?php selected( $pydnet_show_author, $author ) ?> ><?php echo $author ?></option>\';
<?php
}
}