如果页面具有特定的短代码,我想向页面添加body_class。
在性能方面,以下哪种方法是最有效的?
function my_body_class($classes) {
$post_id = get_the_ID();
if( isset($post_id) && has_shortcode( $post->post_content, 'my_shortocde' ) ) {
$classes = array_merge( $classes, array( 'my-body-tag' ));
}
return $classes;
}
add_filter( 'body_class', 'my_body_class', 10, 1 );
function my_body_class($classes) {
$post_id = get_the_ID();
if( isset($post_id) && get_post_meta($post_id, '_my_shortocde_is_used') ) {
$classes = array_merge( $classes, array( 'my_body_tag' ));
}
return $classes;
}
add_filter( 'body_class', 'my_body_class', 10, 1 );
什么会更快? has_shortcode做的正则表达式还是get_post_meta做的查询?您会使用哪一个?
更新:@@ Rimarx
建议的挂钟计时结果选项1:使用has_shortcode()
Wall clock time: 8.66254170735685E-06 = 0.00000866254170735685
选项2:使用get_post_meta()
Wall clock time: 2.88486480712892E-05 = 0.00002884864807128920
使用has_shorcode获胜。
侧面说明:在此测试中,mysql数据库与wordpress在同一台服务器上。
答案 0 :(得分:0)
您可以像这样检查速度
<?php
$start = microtime(true);
//Your code
echo 'The script time: ' . (microtime(true) - $start) . ' seconds';
?>
作为选择:
function my_body_class($classes) {
$start = microtime(true);
$post_id = get_the_ID();
if( isset($post_id) && has_shortcode( $post->post_content, 'my_shortocde' ) ) {
$classes = array_merge( $classes, array( 'my-body-tag' ));
}
return 'The script time: ' . (microtime(true) - $start) . ' seconds';
}
add_filter( 'body_class', 'my_body_class', 10, 1 );
如果尝试这样做,请写结果:)