GET_POST_META在数据库中显示数据时返回空字符串

时间:2018-03-06 作者:James Meyer

我完全被难住了,我希望这是一件愚蠢的事情,我只是看不到,因为我离它太近了。

使用Sensei制作LMS。正在尝试从课程中获取课程id。非常简单,它只是自定义帖子类型上的元数据。

将所有内容简化为以下简单陈述:

echo \'Course ID: \' . get_post_meta(17234, \'_lesson_course\', true);
我检查了数据库,数据肯定在那里:enter image description here

只有一场比赛。

但是,它总是只返回一个空字符串(如果我将最后一个参数设置为false,则返回一个空数组)。

做了更多的挖掘。发现我的问题是我的新功能,但我不知道为什么。

这里是整个混乱:

function search_results_per_page( $query ) {
    echo \'Checking\';
    if ( $query->is_search() ) {
        $accessible_post_ids = get_accessible_post_ids();
        $query->set(\'post__in\', $accessible_post_ids);
    }
    return $query;
}
add_action( \'pre_get_posts\',  \'search_results_per_page\'  );

function get_accessible_post_ids() {
    $allowed_posts = [];
    $user_id = get_current_user_id();
    $args = array(\'posts_per_page\' => -1, \'post_type\' => array(\'lesson\', \'course\', \'page\'));
    $search_posts = new WP_Query($args);
    while($search_posts->have_posts()) {
        $search_posts->the_post();
        $post_type = get_post_type();
        $post_id = get_the_id();
        switch($post_type) {
            case \'lesson\':
                echo \'Post ID: \' . $post_id;
                $course_id = get_post_meta($post_id, \'_lesson_course\', true);    
                echo \' Course ID: \' . $course_id . \'<br>\';
                if(sensei_has_user_started_course($course_id, $user_id)) {
                    $allowed_posts[] = $post_id;
                }
                break;
            case \'course\':
                if(sensei_has_user_started_course($post_id, $user_id)) {
                    $allowed_posts[] = $post_id;
                }
                break;
            default:
                $allowed_posts[] = $post_id;
                break;
        }
    }
    wp_reset_postdata();
    return $allowed_posts;
}
无论出于什么原因,一旦我进入while循环,get\\u post\\u meta就不再工作了。我有点期待while循环失败,因为它似乎是一个带有过滤器的无限重复循环,但它似乎正在运行。只有get\\u post\\u元返回一个空字符串。

有什么好主意吗?

1 个回复
SO网友:Anteraez

Edit

无效答案

下面的答案无效,因为get\\u The\\u id()和get\\u The\\u id()都返回循环内帖子的所需id。感谢@Jess\\u Pinkman指出这一点。

您的代码应该可以正常工作,但唯一的问题是您使用的函数不正确,无法在循环中获取帖子的ID。

要获取循环内帖子的ID,需要使用函数get_the_ID().

您使用的是get_the_id() 事实上get_the_ID(). 这有很大的不同。

$post_id = get_the_id(); // This will not return anything since the
                         // function doesn\'t even exist, so $post_id
                         // will be empty.
get_the_id() 没有返回任何内容$post_id 变量保持为空。所以当get_post_meta() 函数运行时,它不知道要获取哪个帖子的元,因为没有给定的ID。如果启用WordPress调试模式,它甚至会给您一些错误。

要获取meta,您需要使用正确的函数,即。get_the_ID() 如下所示。

$post_id = get_the_ID();

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在