检查存在哪个页面的特定结果

时间:2018-06-18 作者:Christine Cooper

我有一个$term_id = 123 我想知道这个术语出现在分页的哪一页上。例如,我们有:

$args = array(
    \'taxonomy\' => \'hello\',
    \'offset\'       => $offset,
    \'number\'       => 10, // total per page
    \'hide_empty\' => false,
);

$term_query = new WP_Term_Query( $args );
我们得到1000条返回的条款,每页显示10条。如何在哪一页上找到$term_id 是否存在?

显然,我可以循环查看所有结果$term->term_id == $term_id 匹配并记下迭代键,但我希望有一种更可行的方法。。。?

而我的案子是针对WP_Term_Query(), 这应该适用于查询其他对象,如帖子等。

1 个回复
最合适的回答,由SO网友:Shibi 整理而成

您可以从DB中选择此term\\u id,并在SQL查询中添加行号列,然后可以计算它应该位于哪个页面。

例如:

global $wpdb;
$wanted_term = $wpdb->get_row("SELECT terms.* FROM (
    SELECT @rownum := @rownum + 1 AS rownum, t.*, tt.taxonomy
    FROM wp_terms AS t
    INNER JOIN wp_term_taxonomy AS tt
    ON t.term_id = tt.term_id, (SELECT @rownum := 0) AS r
    WHERE tt.taxonomy IN (\'hello\') /* replace taxonomy */
) AS terms WHERE terms.term_id=123 /* replace term_id */ ORDER BY terms.name ASC");
并使用PHP进行计算。

$terms_per_page = 10;
$term_in_page = ceil($wanted_term->rownum / $terms_per_page);
更新SQL查询,使其具有元键、object\\u id和按元值排序

SELECT allterms.* FROM (
    SELECT @rownum := @rownum + 1 AS rownum, terms.* FROM (
        SELECT DISTINCT t.*, tt.taxonomy, tt.term_taxonomy_id, tm.meta_key, tm.meta_value, tr.object_id
        FROM wp_terms AS t
        INNER JOIN wp_termmeta AS tm ON ( t.term_id = tm.term_id )
        INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
        INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id
        WHERE tt.taxonomy IN (\'fn_release\') /* replace taxonomy */
        AND tr.object_id IN (108) /* replace object_ids */
        AND ( tm.meta_key = \'ma_tsms\' )
        ORDER BY tm.meta_value+0 DESC
    ) AS terms, (SELECT @rownum := 0) AS r
) AS allterms WHERE allterms.term_id=2543 /* replace term_id */
查询耗时0.0020秒。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post