首页 > 解决方案 > 如何在 search.php 中使用 wp 循环

问题描述

如何在 search.php 中分离产品和发布

我想在 search.php 中得到结果,只包括帖子和产品,帖子列表将显示在 POST 选项卡中,产品列表在 PRODUCT 选项卡中。我尝试将此代码用于循环,但它会获取所有帖子和产品:

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
       <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php endwhile;?>
<?php endif; ?>

标签: phpwordpressloops

解决方案


您可能想尝试将 post_type 参数添加到 URL。

www.example.com?s=test&post_type=product(显示产品)

www.example.com?s=test&post_type=page(显示页面)

这不是您要问的,因为这是 2 个单独的页面(不是 1 个带有 2 个选项卡的页面)。您可以向表单添加隐藏的输入字段,以便让浏览器自动将帖子类型附加到 URL。IE。

<form method="get" action="<?= get_bloginfo( 'url' ); ?>">
    <input type="hidden" name="post_type" value="product">
    <input type="text" name="s" value="<?= get_search_query(1); ?>" placeholder="Search Products...">
    <button type="submit">Go</button>
</form>

要在同一页面上显示 2 个选项卡,您可以使用 search.php 并忽略主查询,只需通过访问 $_GET['s'] 编写您自己的两个查询(函数 get_search_term() 也访问 $_GET ['s'] 但也可以对其进行消毒)。或者,您可以使用页面模板编写自己的查询,在不同的 URL 上显示搜索结果(您必须修改所有搜索表单才能转到此处)。

当您访问您的网站主页 URL 并将 ?s= 添加到 URL 时,WordPress 知道提供 search.php 并在幕后运行“主查询”(使用 WP_Query)。主要查询是您在调用 while( have_posts() ) 等时循环的内容。

编写自己的查询来显示搜索结果可能会降低您的代码与修改主查询以显示更有意义的搜索结果的插件的兼容性。这取决于他们如何执行是否修改特定查询的逻辑。例如,他们可能会检查该查询是主查询并且您在 search.php 页面上。当您使用 WP_Query 或 get_posts() 编写自己的查询时,它不再是主要查询。

WP_Query(或调用 WP_Query 的 get_posts())应该有一个参数,您可以在其中指定搜索词,它可能会负责解析所有不同的词并将其转换为(有点)有用的 SQL。您应该阅读 WP_Query 上的文档以获取更多信息。

抱歉,这不是一个完整的答案,但也许它会引导您朝着正确的方向前进。


推荐阅读