надеюсь, вы можете помочь мне с этим сценарием:
У меня есть несколько запросов разных типов постов внутри функции шорткода.
Сейчас я пытаюсь сохранить эти запросы с переходными процессами.
Но эти переходные процессы должны иметь уникальное имя для каждой страницы, с которой вызывается шорткод.
$trans_posts_golfcourse_ = 'trans_posts_golfcourse_'.$landingpage;
if( false === ( $$trans_posts_golfcourse_ = get_transient( 'trans_posts_golfcourse_' ) ) ) {
$args = array (
'posts_per_page'=> 5,
'post__in' => $posts_golfcourse,
'post_type' => 'golfcourse',
'post_status' => 'publish',
'cache_results' => false,
);
$$trans_posts_golfcourse_ = new WP_Query( $args );
set_transient( 'trans_posts_golfcourse_', $$trans_posts_golfcourse_, 60*60*4 );
}
Динамически генерируемое имя переменной
$$trans_posts_golfcourse_
Но как это должно выглядеть как параметр?
get_transient( 'trans_posts_golfcourse_' )
Заранее спасибо!
РЕДАКТИРОВАТЬ: найдено решение для динамической переменной в качестве параметра
Параметр (строка) должен быть сгенерирован так же, как и имя переменной:
get_transient( 'trans_posts_golfcourse_'.$landingpage )
полный код:
$trans_posts_golfcourse_ = 'trans_posts_golfcourse_'.$landingpage;
if( false === ( ${$trans_posts_golfcourse_} = get_transient( 'trans_posts_golfcourse_'.$landingpage ) ) ) {
$args = array (
'posts_per_page'=> 5,
'post__in' => $posts_golfcourse,
'post_type' => 'golfcourse',
'post_status' => 'publish',
'cache_results' => false,
);
${$trans_posts_golfcourse_} = new WP_Query( $args );
set_transient( 'trans_posts_golfcourse_'.$landingpage, ${$trans_posts_golfcourse_}, 60*60*4 );
}
РЕДАКТИРОВАТЬ: Transient не сокращает запросы, хотя кажется, что переходный процесс вызывается правильно. У кого-нибудь есть идея?
Решение состоит в том, чтобы поставить запрос а также петля внутри переходного процесса.
Возможны два метода:
Внутри функции (короткий код например)
function get_content( $dynamic_var ){
$transient_time = 60*60*4;
$transient_name = "transient_name_" . $dynamic_var;
$content = get_transient( $transient_key );
if( !empty($content) ) { return $content; }
$args = array ('');
$query = new WP_Query( $args );
$content = '';
if( $query->have_posts() ):
while( $query->have_posts() ) : $query->the_post();
$content.= 'some_content';
endwhile; wp_reset_postdata();
endif;
set_transient( $transient_name, $content, $transient_time );
return $content;
}
Внутри шаблона
$transient_time = 60*60*4;
$transient_name = 'transient_name_' . $page_id;
// ${$transient_name} > name of variable is dynamically created by
// the value of variable $transient_name (search for > php variable variables)
$content = '';
if( false === ( ${$transient_name} = get_transient( $transient_name ) ) ) {
$args = array ('');
$query = new WP_Query( $args );
$content_inner = '';
if( $query->have_posts() ):
while( $query->have_posts() ) : $query->the_post();
$content_inner.= 'some_content';
endwhile; wp_reset_postdata();
endif;
set_transient( $content_inner, ${$transient_name}, $transient_time );
}
$content.= ${$transient_name};
Других решений пока нет …