1

不是代码问题,我只是不知道在这种特定情况下事情是如何工作的。

我正在使用 Wordpress 主题,该主题应该通过 javascript 动态加载部分 php 代码。它实际上与 UA 嗅探结合使用,因为如果设备是移动设备,则无论如何都应该使用移动模板,但这不是重点。

  • 如果 screen.width < 1080px 我的 Wordpress 主题的移动版本菜单应该被加载。
  • 否则,如果 screen.width 较大,则应加载桌面菜单版本
  • 仅基于 CSS 媒体查询的解决方案是不可接受的,因为桌面版本太重了。

所以我决定通过enquire.js有条件地动态加载内容 我的 WP-homepage-template.php 的第一部分是:

enquire.register("screen and (max-width:1080px)", {
<script type="text/javascript">
    match : function() {
        $("body").load(
          "/path/headernav-phone.php"
        );

    unmatch : function() {
            $("body").load(
          "/path/headernav-desktop.php"
        );
    }
}

因此,当屏幕尺寸达到 1080 像素时,Wordpress 应该加载仅包含 wp_nav_menu(MOBILE) 调用的 headernav-phone.php。如果屏幕尺寸更大,Wordpress 会加载 headernav-desktop.php,其中包括 wp_nav_menu(DESKTOP)。

这不起作用:

致命错误:在第 14 行调用 /XX/YYY/ZZZ/webseiten/XXX.YY/wp-content/themes/MyTheme/templates/headernav-phone.php 中未定义的函数 wp_nav_menu()

看起来我的代码是在 CMS 之前运行的,它破坏了自己的功能。

4

1 回答 1

1

IMO,逻辑有缺陷。
一方面,无法使用 PHP 检测屏幕宽度

其次,如果你要生成一个 PHP -> JS 文件(my-script.js.php),你必须加载 WordPress 引擎两次
此链接中的答案是super-pro。您会发现使用wp-load.php和的更简单的方法WP_USE_THEMES

第三,您尝试加载主题模板的方式需要“加载两次”方法。或者用 AJAXwp_localize_script.

如果我正确理解了这个问题,我认为最好的选择是使用WordPress 用户代理检测并相应地将您的脚本和样式排入队列。研究核心功能以适应您的需求。

[更新]

仍然不确定是否真的需要所有这些复杂性。像这样的东西可以通用header.php吗?

if( wp_is_mobile() )
    wp_nav_menu(MOBILE);
else
    wp_nav_menu(DESKTOP);

但是,如果您真的需要动态发生这种更改,那么 AJAX 将是您的选择。

于 2013-08-26T03:31:04.617 回答