我已经阅读了大约20篇关于这个主题的不同帖子,但我仍然无法将解决方案应用到我遇到的问题上。很抱歉,我无法根据这些答案来解决这个问题,但我想知道是否有人可以帮助我解决我的特殊情况。我是php的初学者,请原谅我的无知。
我想在一篇帖子上创建一个查询,其中显示两个元键值(使用OR关系)与当前帖子ID匹配的其他帖子。
我的设置如下:
后元字段\'author_company\' - 将另一篇文章的详细信息存储为序列化数据,例如;a: 24:{s:2:ID:3:531:11:post-U作者:s:2:44:9:post-U日期:s:19:2015-12-18 10:35:43:13:发布时间:2015-12-18 10:35:43发布内容:581ta字段\'_pods_author_company\' - 这是由我用于CPTs的Pods插件创建的,它只存储帖子ID,但仍然以序列化格式,例如a:1:{I:0;I:531;}我有一个职位作为公司简介页面,我想在那里显示分配给该公司的所有职位。如何查找“author\\u company”或“pods\\u author\\u company”包含与此公司简介帖子匹配的ID的帖子?
E、 g.如果Example Company Ltd.的帖子ID为444,并且有一些帖子已分配给该公司,因此这些帖子上“author\\u Company”和/或“pods\\u author\\u Company”的序列化数据包含ID 444,我如何显示这些帖子?
以下是我如何获取所需数据的方法:
在公司简介栏上:
$post_id = get_the_ID(); //Get the ID of the current post (which is the company profile post)
在分配给该公司的岗位上:
$author_company = get_post_meta( $post->ID, \'author_company\', true );
$author_company_id = $author_company[\'ID\']; //Get just the post ID from the serialized data
$_pods_company = get_post_meta( $post->ID, \'_pods_author_company\', true );
$_pods_company_id = $_pods_author_company[\'0\']; //Get just the post ID from the serialized data
我已经用var\\u dump进行了测试,这些测试确实得到了我需要的ID。
To summarise: How can I query posts where $author_company_id OR $_pods_company_id MATCHES the current $post_id?
我知道将序列化数据用于元数据是一种非常糟糕的做法,但我不知道如何绕过它——这是Pods的工作方式。看起来我不得不把豆荚装进垃圾箱,尝试用另一种方式来做,但我真的不想这样。。。
感谢您提供的任何帮助。
SO网友:Tom J Nowell
For 99% of cases, no, you can\'t.
序列化数据不是您可以搜索的内容,这是根本问题。不是如何搜索它,而是它从一开始就被序列化了。不需要序列化。这与您无法解读egg的原因相同,序列化数据,尤其是PHP序列化数据,不是为搜索而构建的,数据库也不是为此而优化的。
因此,解决方案是将要搜索的数据存储为可以搜索的独立post meta。或者更好的方法是,完全避免超昂贵的post meta查询,并将要搜索的数据存储在分类术语中(正如最初设计的那样)。
对于这1%的情况,您可以使用LIKE
键入search查找已知的值,但会有误报的风险,这将是一个超慢/昂贵/繁重的查询。如果可行的话。
将来,有一些重要的信息可以帮助您:
元键不是唯一的,您可以通过以下方式使用相同的元键添加多个值add_post_meta
, 然后使用get_post_meta
通过将第三个参数设置为false
. 可重复字段不需要序列化存储结构化数组不需要序列化字符串。使用3个元键/值对调用company_name
company_id
和company_address
远比单身好company
具有序列化结构的metaid
name
和address
内部字段我知道将序列化数据用于元数据是一种非常糟糕的做法,但我不知道如何绕过它-这是Pods的工作方式。看起来我不得不把豆荚装进垃圾箱,尝试用另一种方式来做,但我真的不想这样。。。
您不必为所有事情都使用Pods,您可以使用Pods,然后使用额外的插件库或手动编写的代码,Pods支持和文档可能对此有答案,但第三方插件支持在本网站上是非主题即使POD无法更改,也不能阻止您通过可查询的过滤器和挂钩保存额外的重复数据对要筛选/查询/搜索的内容使用分类法。Post meta经过优化,可以在您已经知道Post ID的情况下查找关键字/值。将其倒置意味着查询的成本会很快变大,并且无法扩展。这是WordPress网站运行缓慢的最大原因之一