似乎是的,这取决于它是否创建新查询。正如米洛在回答中指出的那样,WordPress使用的是缓存系统。函数堆栈如下所示:
get_the_permlink()
呼叫get_permalink()
呼叫get_post()
当给帖子ID时,它会执行以下操作:
$_post = WP_Post::get_instance( $post );
看起来像:
/**
* Retrieve WP_Post instance.
*
* @static
* @access public
*
* @param int $post_id Post ID.
* @return WP_Post|bool Post object, false otherwise.
*/
public static function get_instance( $post_id ) {
global $wpdb;
$post_id = (int) $post_id;
if ( ! $post_id )
return false;
$_post = wp_cache_get( $post_id, \'posts\' );
if ( ! $_post ) {
$_post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1", $post_id ) );
if ( ! $_post )
return false;
$_post = sanitize_post( $_post, \'raw\' );
wp_cache_add( $_post->ID, $_post, \'posts\' );
} elseif ( empty( $_post->filter ) ) {
$_post = sanitize_post( $_post, \'raw\' );
}
return new WP_Post( $_post );
}
在这个
get_instance()
函数检查是否可以找到
$post_id
在
posts
缓存,如果有,则
does not 需要实际查询数据库。但我不确定这是否算作次要查询或主要查询。
有时你可以在get_{$field}()
通过访问对象本身来实现函数,但我认为使用它们不会带来巨大的性能差异。MYSQL的速度很快,功能也很强大,所以我不会认为它是一件坏事或是一件值得远离的事情。