在 HTML Select 标签中使用数据库输出 PHP

Using database output in HTML Select Tag with PHP

我在 wordpress 网站上完美运行了以下内容。

<?php 

global $wpdb;

$results = $wpdb->get_results( "SELECT post_title FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );
$options = array();
foreach ($results as $result) {
$options[$result->post_title] =  $result->post_title;
}

echo '<select class="field" name="djshow">';
foreach ($options as $key => $value) {
echo "<option value='$key'" . ( $_GET['show'] == $value ? " selected='selected'" : "" ) . ">$value</option>";
}
'</select>';

?>

它从 wp_posts 中搜索 post_title 的每个实例,其中 post_typeshowpost_statuspublic。然后它对其进行排序并将其输出到数组,然后使用每个匹配的 post_title 的列表填充 Select 标记。

目前它输出 post_title 到选项值和名称字段....

我想做的是 select 原始查询中的另一个字段 ID 来填充选项值,而 post_title 填充名称。

因此 select 在 html 中呈现时会读取类似这样的内容:

<option value="15">Post Title 1</option>
<option value="18">Post Title 2</option>
<option value="23">Post Title 3</option>
etc...

我认为我需要使用的正确查询是这个(但如果我错了请纠正我)

$results = $wpdb->get_results( "SELECT post_title,ID FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish' ORDER BY post_title ASC" );

但这就是我有限的知识让我失望的地方...

如何将 ID 的输出分配给选项值,将 post_title 的输出分配给 select 标签?

当您查询多个值时,您可以使用逗号分隔它们。 在你的代码中

post_title AND ID

应该是

post_title, ID

您的 return 值在 $results 中,您的 foreach 可能是

foreach ($results as $result) {
echo "<option value='$result->ID'" . ( $_GET['show'] == $result->ID ? " selected='selected'" : "" ) . ">$result->post_title</option>";
}

不确定您的 $_GET 是否持有 post_title 或 ID

将 SQL 更改为包括 post_titleID 之后,您实际上只需要修复这部分:

foreach ($results as $result) {
  $options[$result->post_title] =  $result->post_title;
}

现在应该是:

foreach ($results as $result) {
  $options[$result->ID] =  $result->post_title;
}

因为在接下来的 foreach 中,您在 $key 中的内容来自您放在括号中的内容,而 $value 来自作业的右侧。