草庐IT

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

coder 2023-10-26 原文

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

我有一个自定义的书籍 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 - 在自定义帖子类型 WordPress 中插入来自自定义帖子类型的数据的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  5. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  6. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  7. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  8. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  9. ruby - 如何在 Grape 中定义哈希数组? - 2

    我使用Ember作为我的前端和GrapeAPI来为我的API提供服务。前端发送类似:{"service"=>{"name"=>"Name","duration"=>"30","user"=>nil,"organization"=>"org","category"=>nil,"description"=>"description","disabled"=>true,"color"=>nil,"availabilities"=>[{"day"=>"Saturday","enabled"=>false,"timeSlots"=>[{"startAt"=>"09:00AM","endAt"=>

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐