我完全被难住了,我希望这是一件愚蠢的事情,我只是看不到,因为我离它太近了。
使用Sensei制作LMS。正在尝试从课程中获取课程id。非常简单,它只是自定义帖子类型上的元数据。
将所有内容简化为以下简单陈述:
echo \'Course ID: \' . get_post_meta(17234, \'_lesson_course\', true);
我检查了数据库,数据肯定在那里:
只有一场比赛。
但是,它总是只返回一个空字符串(如果我将最后一个参数设置为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元返回一个空字符串。
有什么好主意吗?
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();