wordpress - 如何使用 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。
谢谢,
解决方案
即使它“有效”,您当前的功能也不起作用。您正在尝试根据最近访问者的设备在数据库中设置站点范围的选项。
在这里使用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;
}
}
}
推荐阅读
- encryption - 尝试使用 itext 加密 PDF 时出错:java.lang.SecurityException: class "org.bouncycastle.asn1.ASN1Primitive"'s
- i2c - 使用 micropython 的 pca9685 和节点 mcu
- php - 我真的需要所有供应商组件来使用谷歌日历 API 吗?
- elasticsearch - 在弹性搜索中按几个术语和限制分组
- reactjs - 如何在 React 中构建专门的组件
- android - 带有垂直 ScrollView 的 MotionLayout
- azure-api-management - 为什么我对 ASP 资源的请求未按 Azure API 管理的预期路由?
- python - 导入rospy和roslib库的问题
- discord.py-rewrite - 为什么discord.py-rewrite bot.loop.create_task(my_background_task()) 执行一次但不重复
- c# - 检查 null 或空 IEnumerable
在 C# 中