Как настроить домашнюю страницу на основе устройства с Wordpress? - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно установить домашнюю страницу по умолчанию на основе устройства посетителя (мобильный / рабочий стол), я попробовал следующий код в плагине, но он не работал.

if ( wp_is_mobile() ) {
  $homepage = get_page_by_title( 'mobile' );
}else{
  $homepage = get_page_by_title( 'home1' );
}
if ( $homepage ){           
  update_option( 'page_on_front', $homepage->ID );      
  update_option( 'show_on_front', 'page' );                 
}

он продолжает загружать home1, чтовыбрано из вариантов темы.

Спасибо,

1 Ответ

0 голосов
/ 10 октября 2018

Ваша текущая функциональность не будет работать, даже если она "сработает".Вы пытаетесь установить в базе данных опцию для всего сайта на основе устройства самого последнего посетителя.

Использование update_option() здесь не в ваших интересах.Вам нужно программно изменить шаблон, который загружается во время выполнения, на основе устройства пользователя, используя фильтр template_include - таким образом вы не сохраняете (полу) постоянные изменения в вашембаза данных, которая будет постоянно перезаписываться бесчисленным количеством раз любым пользователем и влиять на всех остальных пользователей.

Это будет выглядеть примерно так:

add_filter( 'template_include', 'so_52745088_homepage_template', 99 );
function so_52745088_homepage_template( $template ){
    // Only execute on the front page, not pages/posts/cpts
    if( is_front_page() ){
        // Determine if mobile
        if( wp_is_mobile() ){
            // Make sure mobile homepage template is found
            if( $home_template = locate_template( array( 'homepage-mobile.php' ) ) ){
                return $new_template;
            }
        }
    }

    return $template;
}

Если у вас нет отдельногошаблон страницы для мобильных устройств, и это просто обычная отдельная страница, тогда вы можете посмотреть, используя wp_safe_redirect() на любом количестве хуков, общим является template_redirect,который в конечном итоге будет выглядеть так:

add_action( 'template_redirect', 'so_52745088_homepage_redirect' );
function so_52745088_homepage_redirect( $template ){
    // Only execute on the front page, not pages/posts/cpts
    if( is_front_page() ){
        // Determine if mobile
        if( wp_is_mobile() ){
            wp_safe_redirect( 'mobile' );
            exit;
        }
    }
}
...