【问题标题】:Insert data from custom posttype in custom posttype WordPress在自定义帖子类型 WordPress 中插入来自自定义帖子类型的数据
【发布时间】:2017-01-03 18:16:54
【问题描述】:

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

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

我可以在我的数据库中看到:

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

而且效果很好(记住;我对此没有太多经验)。我可以在管理面板中将书籍和课程相互连接。我也看到了(thumbnailtitle 等)

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

我使用现有的插件(LearnPress、old version 0.9.20 或其他)作为基础。

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

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

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

获取课程数据的部分代码在这里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             
    "
    )
);

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

我会把饼干和巧克力寄给可以帮助我的人。

编辑编辑编辑:

milan kyada 的答案对我来说并不奏效。

我发现我可以通过 $lesson_id 检索课程 ID。有了这个课程 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 个或多个与课程对应的书籍 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,它就不起作用。

我该如何解决这个问题?还是将两张表合并为一张?

【问题讨论】:

  • $lesson_id 是您当前的帖子 ID 吗?你想要所有有 _lpr_lesson=$lesson_id 的帖子吗?我说的对吗?
  • 是的,你是。例如,我得到 216 和 276。所以我可以在 wp_post 表中获取 post_title 和 thumbnail。

标签: php mysql wordpress


【解决方案1】:

我找到了答案:

$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 而不是 =。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多