我目前正在处理一个自定义循环/查询,需要将帖子的永久链接添加到从DB检索的帖子数组中。
悲哀地get_permalink()
为每个调用生成一个额外的DB请求,正如我所列出的,这可能会变得非常激烈all 一页上的帖子。
我首先想到的可能是get_option( \'permalink_structure\' );
或get_option( \'default_category\' );
没有自动加载选项,但两者都是自动加载的。此处证明:
function wpse_list_autoloaded_opts()
{
$results = $wpdb->get_results( "
SELECT option_name, option_value
FROM $wpdb->options
WHERE autoload = \'yes\'
" );
echo \'<pre>\';
foreach( $results as $result )
if ( \'permalink_structure\' === $result->option_name OR \'default_category\' === $result->option_name )
echo "Name: {$result->option_name}, Value: {$result->option_value}<br />";
echo \'<pre>\';
}
add_action( \'shutdown\', \'wpse_list_autoloaded_opts\' );
<小时>
EDIT: 好的,我设法找到了
the following lines 内部
get_permalink()
作用
if ( is_object($id) && isset($id->filter) && \'sample\' == $id->filter ) {
$post = $id;
$sample = true;
} else {
$post = &get_post($id);
$sample = false;
}
So my Q is now: 我如何避免运行
else
part,调用
get_post()
另外的查询呢?
<小时>EDIT 2: 现在发现get_permalink()
和Codex. 你可以通过整个$post
对象也输入函数。这解决了if ( is_object($id)
部分
Still open: 我到底要从哪里取回$post->filter
值为\'sample\'
?
<小时>EDIT 3: 正在添加$post->filter = \'sample\'
到每个post对象解决了问题。但剩下的是一种不好的感觉,我可能会打破一些东西。这个\'sample\'
在里面$id/$post->filter
看起来很奇怪,我不知道它是从哪里来的。