Переходные процессы WordPress с динамически генерируемым именем в качестве параметра в функции

надеюсь, вы можете помочь мне с этим сценарием:

У меня есть несколько запросов разных типов постов внутри функции шорткода.
Сейчас я пытаюсь сохранить эти запросы с переходными процессами.
Но эти переходные процессы должны иметь уникальное имя для каждой страницы, с которой вызывается шорткод.

$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 не сокращает запросы, хотя кажется, что переходный процесс вызывается правильно. У кого-нибудь есть идея?

0

Решение

Решение состоит в том, чтобы поставить запрос а также петля внутри переходного процесса.
Возможны два метода:

  1. Внутри функции (короткий код например)

        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;
    }
    
  2. Внутри шаблона

            $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};
    
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]