Я хочу добавить body_class к страницам, если страница имеет определенный шорткод.
Какой из следующих методов будет наиболее эффективным, когда речь заходит о производительности?
- Используйте has_shortcode () как
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 );
- Предположим, что в таблице post_meta для страницы есть пользовательский meta_key с мета-значением true, добавленным где-то еще в коде при обновлении страницы, и вы используете get_post_meta (), как
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.