首页 > 解决方案 > 如何使用 Wordpress 设置基于设备的主页?

问题描述

我需要根据访问者设备(移动/桌面)设置默认主页,我在插件中尝试了以下代码,但没有奏效。

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。

谢谢,

标签: wordpresscustom-wordpress-pages

解决方案


即使它“有效”,您当前的功能也不起作用。您正在尝试根据最近访问者的设备在数据库中设置站点范围的选项。

在这里使用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;
        }
    }
}

推荐阅读