如何从postmeta获取post_id

时间:2019-11-17 作者:lenhe

我正试着去拿post_idwp_postmeta 表中,以下是我使用的代码:

if(isset($_POST[\'patientid\'])) { //user enters the patientid

    $thevalue = $_POST[\'patientid\'];
    $tbl = $wpdb->prefix.\'postmeta\';

    $prepare_guery = $wpdb->prepare( "SELECT post_id FROM $tbl WHERE meta_key =\'patientid\' AND meta_value LIKE $thevalue", $meta_value );

    $get_values = $wpdb->get_col( $prepare_guery );
    echo $get_values;
}
但这只打印出“数组”,仅此而已。

谁能告诉我该换什么吗?非常感谢。

1 个回复
SO网友:Sally CJ

WordPress元API用于从wp_postmeta 表,但API不提供检索post ID的函数(post_id 值),但您可以在代码中使用自定义SQL。

然而$wpdb->get_col() 返回一个值数组(如果成功),这就是为什么在执行此操作时会得到“数组”echo $get_values;.

所以你可以这样做:

$post_ids = $wpdb->get_col( $prepare_guery ); // returns an array of IDs on success
$post_id = $post_ids[0]; // simplified - assuming that $post_ids[0] is actually set
var_dump( $post_ids ); // for testing
或者(更简单的选项),如果只想检索单个值,则应使用$wpdb->get_var():

$post_id = $wpdb->get_var( $prepare_guery ); // returns a string (an ID) on success

附加注释

$prepare_guery = $wpdb->prepare( "SELECT post_id FROM $tbl WHERE meta_key =\'patientid\' AND meta_value LIKE $thevalue", $meta_value );
应为:

$prepare_guery = $wpdb->prepare( "SELECT post_id FROM $tbl WHERE meta_key =\'patientid\' AND meta_value LIKE %s", $wpdb->esc_like( $thevalue ) );
一、 e.注意%s (占位符)并且我还使用$wpdb->esc_like(). 我还意识到$meta_value 没有在代码中定义,因此我将其(在上面的代码中)更改为$thevalue.

在之前的修订中,我把$prepare_guery$prepare_query... 或者你是说$prepare_query ?

相关推荐

升级到PHP7.3并将Apache从Prefork更改为Event Breakes WordPress

我在Ubuntu 18.04上。我刚刚将服务器从PHP7.2更新为PHP7.3using this guide之后,我将Apache从Prefork更改为Eventusing this guide现在,当我访问Wordpress网站时,我看到以下内容,而不是普通的主页:<?php /** * Front to the WordPress application. This file doesn\'t do anything, but loads * wp-blog-hea