继承我运行查询的文件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中分配数组的部分
答案 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
}