0

私の構文が正しいかどうかを確認するのを手伝ってくれませんか。このコードを使用してエラーが発生することはありませんが、正しく実行しているかどうかについていくつかの意見が欲しかっただけです。

マルチサイトの Wordpress インストールを使用しており、注目のブログが 1 日以上経過してから 1 週間未満であるかどうかを確認しています。

/* Work out blog of the day */
$featured_id = get_option('featured_blog'); # Current ID
$featured_time = get_option('featured_time'); # Current Time

if($featured_time > time()-86400 && $featured_time < time()-604800) // more than 1 Day ago but less than a week
{
    $query = "SELECT blog_id FROM `wp_blogs` WHERE public = '1' and archived = '0' and spam = '0' and deleted = '0' AND blog_id NOT IN ('".$featured_id."', '1','27') ORDER BY rand() limit 1";
    $featured_id = $wpdb->get_var($query);
    update_option('featured_blog', $featured_id);
    update_option('featured_time', time());
}
4

1 に答える 1

0

http://codex.wordpress.org/Database_Description#Table:_wp_blogsによると、列blog_idはintであるため、値を引用符で囲むことはできません。

select ... where ... and blog_id NOT IN (".$featured_id.", 1,27) ...

列、、publicおよびspamについても同じですdeleted

それ以外に、これは実際の問題ではありませんが、構文エラーを見つけることはできません。ただし、タイトルとは異なり、クエリでは時間を使用しません。

if()声明によれば、これは決して真実になることはありません。なぜなら、同時に真実になることはできない$featured_timeからです。コメントのような条件が必要な場合は、次のように言います> now - 86400< now-604800

if ($featured_time < time()-86400 && $featured_time > time()-604800)

ライン上では、これはtime()多かれ少なかれこのように見えます

0          now-604800   now-86400      1354618129
+----------+------------+--------------+
|          |            |              |
1.1.1970   a week ago   24 hours ago   now

したがって、$featured_time1週間前から1日前までの間にある場合は、1週間前(>現在-604800)より大きく、1日前(<現在-86400)未満である必要があります。

于 2012-12-04T09:37:34.123 に答える