wordpress查询麻烦

时间:2010-08-13 09:48:46

标签: php sql wordpress

编辑:

继承我运行查询的文件maby其他其他行为 - http://pastebin.com/4Cw3xMEM


这可以作为SQLyog中的直接查询

SELECT * FROM wp_posts
WHERE post_status = 'publish' 
AND post_type = 'post'
AND YEAR(post_date)=2010
ORDER BY post_date DESC;

它返回了2010年的三个帖子 但是当我尝试通过我的wordpress运行它时,无论日期如何,都会抽出所有帖子

我知道有几件事要做,所以它选择了正确的表格 并且据我所知,以下'应该'没事

SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.post_status = 'publish' 
AND wposts.post_type = 'post'
AND YEAR(wposts.post_date)=2010
ORDER BY wposts.post_date DESC;

我真的不明白'wposts。 “根本没有,但它在wordpress codex的例子中使用了这种东西

最终目标是查询某些年份的帖子,并使用它来制作WP每年的帖子组

我无法找到任何有助于解释如何使用wordpress结构正确调用查询的内容

如果某人可以解释其中的一些内容,那可能会有很多帮助,例如, 以下内容:

$wpdb->posts

我不知道' - >'是什么是的,我只看到它在PHP中用于在foreach中分配数组的部分

  • 我如何让这件事起作用?

4 个答案:

答案 0 :(得分:2)

你对我自己这么做太难了,因为我知道得太好了。当我开始使用WordPress时,我作为高级SQL开发人员来到它,所以我想用SQL编写所有内容。事实证明,你几乎不需要在WordPress上使用SQL,因为它拥有自己的API,内置类似URL的查询语言,并配有缓存系统(缓存系统意味着你不需要像你一样优化否则可能会变薄。)

这是一个独立的文件,您可以放在网站的根目录中(也可以称之为test.php?),这样您就可以测试它,摆弄选项并看到它有效:

<?php

include "wp-load.php";

$year = 2010;

$query = new WP_Query("post_type=any&posts_per_page=-1&year={$year}");
echo "<h1>Year: {$year}</h1>";
echo '<ul>';
foreach($query->posts as $post) {
    echo "<li>{$post->post_title} [post_type={$post->post_type}]</li>";
}
echo '</ul>';

我提到的查询语言,从上面提取,看起来像这样:

  

post_type =任何&安培; posts_per_page = -1&安培;年= 2010

您也可以查询数组表单(例如,它实际上只取决于您的用例和/或您的偏好):

$query = new WP_Query(array(
    'post_type' => 'any',
    'posts_per_page' => -1,
    'year' => $year,
));

WP_Query()的查询参数比我上面使用的三个查询参数多得多。您可以在此处找到这些参数的最佳文档:

请注意,WP_Query()只是在WordPress中查询的一种方式。还有query_posts()get_posts(),您也可以在 hooks 期间与查询进行交互。

是的,有时您需要删除SQL,但在WordPress中更好,特别是对于向后兼容性,如果您避免使用SQL并尽可能使用API​​。

希望这会有所帮助。

-Mike

P.S。想要了解有关WordPress查询的更多信息?我建议你在WordPress Answers提出一周内完全公开测试版的问题(WordPress答案来自StackExchange,与StackOverflow相同。)WordPress答案更有可能让你更好WordPress的答案比这里好,因为该网站将填充WordPress专家,而不是通才(以及其他知识渊博的人)。

答案 1 :(得分:1)

如果以后的格式适合您,请改用它。至于:

$wpdb->posts

->与对象的属性和方法一起使用。在上述情况下,$wpdb是一个必须使用wordpress在某处创建new关键字的对象,posts$wpdb对象的属性,可以从中获取所有帖子数据库。

是否使用尾随括号()识别类成员是方法还是属性。例如:

$wpdb->posts    // property
$wpdb->post()   // method

您可能希望了解PHP OOP基础知识:

答案 2 :(得分:0)

$wpdb->posts

这意味着$wpdb是一个对象,您尝试访问该对象的posts属性。

我对wordpress一无所知,但是,如果你想在字符串中使用这种语法(由“分隔”),你应该使用

${wpdb->posts}

所以试试

$query = "SELECT wposts.* 
          FROM ${wpdb->posts} wposts, ${wpdb->postmeta} wpostmeta
          WHERE wposts.post_status = 'publish' 
          AND wposts.post_type = 'post'
          AND YEAR(wposts.post_date)=2010
          ORDER BY wposts.post_date DESC;";

答案 3 :(得分:0)

$ wpdb是WordPress中使用的全局对象,用于包含与WordPress数据库相关的内容。 - &gt;帖子部分意味着获取该对象的“posts”成员(或者换言之,公共变量)。我只能假设它是您调用导致问题的查询的方式。你应该使用的东西......

$querystr = "SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.post_status = 'publish' 
AND wposts.post_type = 'post'
AND YEAR(wposts.post_date)=2010
ORDER BY wposts.post_date DESC";
$results = $wpdb->get_results($querystr, OBJECT);

foreach ($results as $r) {
    echo $r->title; // echo out variables from table
}