php - 在自定义帖子类型 WordPress 中插入来自自定义帖子类型的数据

标签 php mysql wordpress

我不太熟悉这个,所以这是我的问题。

我有一个自定义的书籍 posttype,我得到了其中一课。 我可以添加书籍,我可以添加类(class)。每当我在管理面板上添加新类(class)时,我都可以向其中添加书籍。多个类(class)可以连接到同一本书,一本书可以放在多个类(class)中。

正如我在我的数据库中看到的那样:

wp_post:

ID       post_title     post_content        post_type    
95       titletest      bladieblabla        lpr_lesson   
97       titletest2     a lot of content    lpr_lesson   
216      hellotest                          lpr_book
276      hellotest2                         lpr_book

wp_postmeta:

meta_id  post_id   meta_key       meta_value
897      216       _lpr_book_url  https://en.wikibooks.org/1
911      276       _lpr_book_url  https://en.wikibooks.org/2
985      276       _lpr_lesson    97
[..]     [..]      [..]           [..]
1001     216       _lpr_lesson    95
1002     276       _lpr_lesson    95

而且效果很好(记住;我对此经验不多)。我可以在管理面板中将书籍和类(class)相互关联。我也看到了(thumbnailtitle 等)

我想要什么;如果在页面上选择一节课,它会打开并显示该课。这意味着该帖子的标题和内容。但我希望它也显示匹配的书。

我使用现有的插件(LearnPress、旧版本 0.9.20 或其他东西)作为基础。

所以我想要的是:我想要表 wp_postmeta 中的所有 post_id,其 meta_value 与当前页面的 post_id 匹配。

假设当前类(class)页面的 post_id 为 95。比我想在 wp_postmeta 表中取回 post_id 的 216 和 276。所以我可以使用这些 ID,这样我就可以先使用 ID 216 来获取 URL 和缩略图。然后从 276 等中检索数据(如果我理解了这一切,也许有一天标题,但现在对我来说可能太难了)

这对我来说真的很复杂,我只是被困住了。这真的真的很烦我(现在是 04:45 哈哈) 如果我执行 $echo $lesson_id,我可以检索类(class)的 ID; 但是我不知道如何获取匹配数据来显示书籍。

获取类(class)数据的代码部分在这里http://pastebin.com/PERv6g5L

当然,我想要一个解决方案来完成这项工作,但如果可能的话,我还想要一个(小的)解释如何以及为什么这样我学会理解它是如何工作的。

我知道我(可能?)应该使用类似的东西:

$books = $wpdb->get_results(
    "
    SELECT          pm.meta_value
    FROM            $wpdb->posts        AS p
    INNER JOIN      $wpdb->postmeta     AS pm  ON p.ID = pm.post_id
    WHERE           mp.meta_key = _lpr_lesson
    OR              mp.meta_key = _lpr_book_url             
    "
    )
);

还有一些代码可以在屏幕上显示它。 但是,还有别的。我真的很困惑。

我会把 cookies 和巧克力送给能帮助我的人。

编辑编辑编辑:

milan kyada 的答案不适合我。

我发现我可以通过 $lesson_id 检索类(class) ID。有了这个类(class) ID,我可以在 meta_value 中搜索相应的书籍。这也意味着我只需要使用表 wp_postmeta

所以我在 meta_value 中搜索 $lesson_id,然后我想要相应的 post_id(书籍的:例如 216)。然后我尝试使用那些 post_id(s) 通过使用 meta_key _lpr_book_url 或 _thumbnail_id 过滤该 post_id 来获取 meta_value。所以我得到 2 个结果:URL 和缩略图 ID。

所以我尝试了什么:

$books = $wpdb->get_results(
    "
    SELECT      meta_value
    FROM        $wpdb->postmeta
    WHERE       (meta_key = '_lpr_book_url'  OR  meta_key = '_thumbnail_id')
    AND         post_id = (
        SELECT      post_id
        FROM        $wpdb->postmeta
        WHERE       meta_value = $lesson_id
        GROUP BY    meta_value
    )
"
);

返回:

Array ( [0] => stdClass Object ( [meta_value] => https://www.brinkman-uitgeverij.nl/lesmateriaal/backend-programmeren ) [1] => stdClass Object ( [meta_value] => 272 ) )

这行不通。它只返回它找到的第一本书,而不返回其他的。如果我使用 GROUP BY post_id,我根本得不到任何结果。

如果我使用这个:

$books_id = $wpdb->get_results(
    "
    SELECT      pm.post_id
    FROM        $wpdb->postmeta  AS pm
    WHERE       pm.meta_value = $lesson_id
    "
);

print_r($books_id);

返回:

Array ( [0] => stdClass Object ( [post_id] => 216 ) [1] => stdClass Object ( [post_id] => 276 ) )

我得到 1 个或多个对应类(class)的图书 ID。所以我想要剩下的:

$books = $wpdb->get_results (
    "
    SELECT      meta_value
    FROM        $wpdb->postmeta
    WHERE       post_id = 216
    AND         (meta_key = '_lpr_book_url'  OR  meta_key = '_thumbnail_id')
    "
);

返回:

Array ( [0] => stdClass Object ( [meta_value] => https://en.wikibooks.org/1 ) [1] => stdClass Object ( [meta_value] => 272 ) )

但是如你所见。我使用硬编码 216。如果我改用 $book_id,它不起作用。

我该如何解决这个问题?或者将两个表合并为一个?

最佳答案

我找到了答案:

$books = $wpdb->get_results(
    "
    SELECT      meta_value
    FROM        $wpdb->postmeta
    WHERE       (meta_key = '_lpr_book_url'  OR  meta_key = '_thumbnail_id')
    AND         post_id IN (
            SELECT      post_id
            FROM        $wpdb->postmeta
            WHERE       meta_value = $lesson_id
    )
    ORDER BY    post_id, meta_key
    "
);

我应该使用 IN 而不是 =。

关于php - 在自定义帖子类型 WordPress 中插入来自自定义帖子类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39177060/

相关文章:

php - 使用 PHP 导出 XLS 文件时出现 Google Chrome 错误

php - 在一对多关系 laravel 5 中保存多条记录

php - 评论表单 'success' 消息转到页面顶部但被固定标题隐藏

php - Memcache->get 返回不同的数组

php - 多对多(belongsToMany)Laravel 关系在 HHVM 下似乎不起作用

php - 表格中玩家代号的数量?

mysql - 从 WPDB 获取结果

javascript - jQuery 如果 data-id 元素 hasClass 不起作用

php - .htaccess, https 重定向到 login.php

javascript - 将 Javascript 添加到 WordPress 的每个页面(除了管理页面)