在搜索表单中查询自定义域

时间:2015-02-25 作者:Chris

在我的searchform.php 我想查询自定义字段的值,将它们添加到下拉列表中,并在提交时返回到相应页面的链接。

到目前为止,我可以创建值下拉列表:

global $wpdb;
$values = $wpdb->get_col("SELECT meta_value
    FROM $wpdb->postmeta WHERE meta_key = \'Price\'" ); 
然而,这只是给了我一个值数组,是否有一个包含页面信息和自定义字段值的对象?

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

选项1-同时获取帖子ID

您还可以选择post_id 当您运行查询时,该字段允许您通过调用get_post($values->post_id); (如果需要)。

global $wpdb;
$query = $wpdb->prepare(\'
    SELECT p.post_id, p.meta_value
    FROM %1$s AS p
    WHERE p.meta_key = "post_views_count"\',
    $wpdb->postmeta
);
$results = $wpdb->get_results($query);
您尚未说明表单提交是如何处理的,但您可以在下拉列表中添加post ID作为值,然后在处理过程中,您拥有该ID并可以使用它做您想要的事情。

if(!empty($results)) :  // Ensure there are results to create a dropdown from

    echo \'<select>\'."\\n";
    
    foreach($results as $result) :  // Loop through each result and output an option
    
        printf(
            "\\t".\'<option value="%1$s">%2$s</option>\'."\\n",
            $result->post_id,
            $result->meta_value
        );
        
    endforeach;
    
    echo \'</select>\'."\\n";
    
endif;
选项2-抓住整个帖子并将其加入meta\\u值-如果上述内容不够深入,您可以选择meta_value 以及使用下面的查询与之相关的帖子。从那里,你可以做任何你想做的事情,因为你会得到完整的职位。

但是请注意,建议您只选择您真正想要的字段(这样更快),因此我建议您替换p.* 只有你们想用的东西。

global $wpdb;
$query = $wpdb->prepare(\'
    SELECT p.*, pm.meta_value
    FROM %1$s AS p
    JOIN %2$s AS pm ON (p.ID = pm.post_id)
    WHERE pm.meta_key = "post_views_count"\',
    $wpdb->posts,
    $wpdb->postmeta
);
$results = $wpdb->get_results($query);

结束

相关推荐

Wpdb查询、wp_INSERT_POST、wp_INSERT_USER等出现问题。查询运行两次

是否有人遇到此问题?我创建了一个自定义php脚本,它通过使用wp_insert_post() 但每次我运行代码时,它都会创建一个2个新帖子,其中应该只有一个帖子,就像它运行了两次一样,所以我使用wpdb->query 也是一样,真的很奇怪。请帮助我,我不知道是什么原因以及如何解决此问题。非常感谢你。这是一个示例代码,我只是为了测试这个问题,它仍然创建了两个相同的帖子 function testtest(){ $ads_data = array(