WordPress尝试查询两个自定义类型以从父级获取子级

时间:2018-04-09 作者:Tom Bird

所以基本上我有这些服务类别,下面是实际的服务。我基本上是在尝试遍历类别并显示类别标题,然后在下面我想遍历所有相应的子项。我在Wordpress中使用“Toolset”自定义字段插件。我有一个“服务类别”的循环,现在我正在尝试通过“服务类别”的子自定义帖子类型“服务”进行循环。

代码方面,这就是我现在所拥有的:

<?php
            $loop = new WP_Query([\'post_type\' => \'service-category\']);
            while ( $loop->have_posts() ) : $loop->the_post();
            ?>

                <h2 class="title">
                    <?php echo the_title(); ?>
                    <?php if(types_render_field(\'subtitle\')) {?>
                      <span class="subtitle"><?php echo types_render_field(\'subtitle\');?></span>
                    <?php }?>
                </h2>


                <?php
                $loop2 = new WP_Query([\'post_type\' => \'service\', \'post_parent\' => get_the_ID()]);
                ?>

                <?php while ( $loop2->have_posts() ) : $loop2->the_post();?>

                <h2 class="title">
                    <?php echo the_title(); ?>
                    <?php if(types_render_field(\'subtitle\')) {?>
                      <span class="subtitle"><?php echo types_render_field(\'subtitle\');?></span>
                    <?php }?>
                </h2>

                <?php endwhile;?>


          <?php endwhile; ?>
这是我如何将子自定义贴子“服务”关联到父“服务类别”的屏幕截图。

enter image description here

$loop2 是我在尝试获取关联的子项时遇到问题的地方。我如何才能做到这一点?如果您能提供任何帮助,我将不胜感激。我已经花了两天的时间搜索文档,我找到的只是通过ui而不是模板方法来完成的方法。

@JacobPeattie当我在数据库中查看关系时,我发现:

enter image description here

所以36 是父级Service Category post\\u id和43 是孩子Service 中的post\\u idpost_meta 桌子我能找到我从未做过的关系meta_query()

2 个回复
SO网友:Jacob Peattie

根据您发布的内容,我们可以看到Service->Service Category关系保存为post meta。因此,您要做的是查询具有_wpcf_belongs_service-category_id 与您要查找的服务类别的ID匹配的元值。

因此,与其查询post_parent, 正在查看post_parent posts表的列,而不是meta,您需要添加一个meta查询。这方面的文档是here, 但对于你的例子,你想改变

$loop2 = new WP_Query([\'post_type\' => \'service\', \'post_parent\' => get_the_ID()]);
对此:

$loop2 = new WP_Query([
    \'post_type\' => \'service\', 
    \'meta_key\' => \'_wpcf_belongs_service-category_id\',
    \'meta_value\' => get_the_ID(),
]);

SO网友:Tom Bird

所以我终于找到了我需要的东西:

                $loop2 = new WP_Query([
                  \'post_type\' => \'service\',
                  \'numberposts\' => -1,
                  \'meta_key\' => \'_wpcf_belongs_service-category_id\',
                  \'toolset_relationships\' => [
                    \'role\' => \'child\',
                    \'related_to\' => $parent_id,
                    \'relationship\' => [\'service-category\', \'service\']
                  ]
                ]);

https://wp-types.com/documentation/customizing-sites-using-php/displaying-child-posts/

结束

相关推荐

尽管php.ini,但仍显示PHP E_WARNING

我在苹果操作系统上。我刚刚升级到High Sierra 10.13。x来自Sierra 10.12。x、 从PHP 5到PHP 7。我突然发现浏览器中显示了PHP警告错误。(PHP错误可以显示在浏览器中,但我不想看到警告。)不需要再修改php了。ini会解决这个问题。最终我意识到问题不在于php。ini,但使用Wordpress本身。(非Wordpress PHP文件中的警告不会显示,应该是这样的。)Wordpress中的某些内容似乎正在覆盖我的error_reporting php中的设置。ini。我怎