【问题标题】:In wordpress foreach loop, return current row id and next/prev row id在 wordpress foreach 循环中,返回当前行 id 和下一个/上一个行 id
【发布时间】:2017-09-09 08:41:42
【问题描述】:

在 wordpress 中,我试图获取一行的当前 id 和即将到来的行的下一个 id。

示例数据库:

    -----------------------------
    |   id  |   book  | orderby |
    -----------------------------
    |    3  |    b    |     1   |
    -----------------------------
    |    1  |    f    |     2   |
    -----------------------------
    |    2  |    g    |     3   |
    -----------------------------

代码:

$entries = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."_books" ORDER BY orderby ASC );
foreach ( $entries as $print ){
    $prev = //on second row this would be 3
    $current = $print->id  //on second row this would be 1
    $next =  //on second row this would be 2
}

我认为没有任何 Wordpress 方式,您只会增加或减少循环中的数组键。这是非常简单的修复。

【问题讨论】:

  • var_dump($entries) - 我猜你有一个数组?
  • 对,就是数组
  • 你使用$wpdb->get_results而不是WP_Query甚至get_posts有什么原因吗?
  • 我了解到,如果您想查询自定义数据库表,您对所有行使用 get_results(),对单行使用 get_row(),我一直在使用这些方法。

标签: php wordpress loops


【解决方案1】:

你可以使用类似下面的东西:

<?php

$entries = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."_books ORDER BY orderby ASC");
$entries = array_values($entries); //shouldn't be needed, but used just in case wordpress returns a non-incrementing key structure for whatever reason

foreach ($entries as $k=>$v) {
    if (isset($entries[$k - 1])) {
        $prev = $entries[$k - 1]->id;
    }
    else {
        $prev = null;
    }

    $current = $v->id;

    if (isset($entries[$k + 1])) {
        $next = $entries[$k + 1]->id;
    }
    else {
        $next = null;
    }
}

?>

【讨论】:

  • +1 - 这几乎正是我想要实现的目标,但你打败了我。下次打字可能慢一点;)干得好!
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 2013-06-09
  • 2013-02-05
  • 1970-01-01
  • 2020-07-16
  • 2018-04-22
  • 2010-10-08
  • 1970-01-01
相关资源
最近更新 更多