我有一个博客,有大约20万篇帖子,每个帖子都有20个自定义字段。
我一直在用WordPressTransients_API 缓存查询,在少数情况下可以使用它,但由于博客的性质,它不能用于其他一些查询。
我的博客是http://fixapk.com
访问应用程序时出现问题(single.php
).
我使用自定义字段*\'\\u similar\\u apps\'*检索相关文章的代码如下:
$args = array(
\'showposts\' => 10,
\'post_type\' => \'post\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'_similar_apps\',
\'value\' => $mainlink,
\'compare\' => \'LIKE\'
),
),
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) : while( $q->have_posts() ): $q->the_post();
// Do something....
但速度很慢。
您可以访问以下链接打开一篇文章并查看其速度
http://fixapk.com/chrome-samsung-support-library/
。。。加载大约需要6-10秒。
那么,如何使用meta_query
?
非常感谢!
SO网友:Douglas.Sesar
建议坚持使用WP\\u query来抓取Wordpress帖子;但是,您可以直接从Posteta表构建自己的查询,然后遍历结果。
根据查询的不同,这可能更快(不经常;Wordpress努力使其数据库查询尽可能快)。
global $wpdb;
$table = $wpdb->prefix . \'the_table_you_want\';
$sql = $wpdb->prepare( \'SELECT id FROM \' . $table . \' WHERE some_field = %s AND another_field = %d;\', \'some_value\', 42 );
$results = $wpdb->get_results( $sql );
foreach( $results as $result ):
//do stuff with $result ( it is an object, not an array )
endforeach;
在构造自己的查询时始终使用prepare。