【问题标题】:Display Wordpress Menu in OpenCart在 OpenCart 中显示 Wordpress 菜单
【发布时间】:2013-05-15 12:45:04
【问题描述】:

我想在 OpenCart 标题中显示一个 Wordpress 菜单。在我的 test.php 页面中,我添加了以下代码;

<?php
require($_SERVER['DOCUMENT_ROOT'].'/wordpress/wp-load.php');  
wp_nav_menu( array( 'menu' => 'Test' ) ); ?>

而且效果很好,但是当我将它添加到 OpenCart 中的 header.tpl 模板中时,我收到一个错误;

Fatal error: Call to a member function get_queried_object() on a non-object in /....../wordpress/wp-includes/nav-menu-template.php on line 256

你能帮忙吗?你以前做过吗?似乎是 OpenCart 导致了问题?

以下进展的附加更新

好的,我已经运行了 OC 和 WP 的默认安装。

Wordpress 位于根目录 - www.test.local Opencart 位于 root/store 目录 - www.test.local/store/

在 Opencart 默认模板标题中,我有以下代码:

<?php $path = $_SERVER['DOCUMENT_ROOT'].'/wp-load.php';
      echo $path;
      require_once($path);  
      wp_nav_menu( array( 'menu' => 'Test' ) ); ?>

这会产生以下错误:

test.local/Sites/test.local/htdocs/wp-load.phpNotice: Constant DB_PASSWORD already defined in test.local/Sites/test.local/htdocs/wp-config.php on line 25Unknown: Redefining already defined constructor for class WP_Widget in test.local/Sites/test.local/htdocs/wp-includes/widgets.php on line 93Warning: strpos() expects parameter 1 to be string, array given in test.local/Sites/test.local/htdocs/wp-includes/functions.php on line 3048
Fatal error: Call to a member function get_queried_object() on a non-object in test.local/Sites/test.local/htdocs/wp-includes/nav-menu-template.php on line 256

有趣的是,当我从 Wordpress 中删除“测试”菜单时,菜单会显示在 Opencart 中,但是我仍然看到以下错误:

/Sites/test.local/htdocs/wp-load.phpNotice: Constant DB_PASSWORD already defined in /Sites/test.local/htdocs/wp-config.php on line 25Unknown: Redefining already defined constructor for class WP_Widget in /Sites/test.local/htdocs/wp-includes/widgets.php on line 93Warning: strpos() expects parameter 1 to be string, array given in /Sites/test.local/htdocs/wp-includes/functions.php on line 3048Notice: Trying to get property of non-object in /Sites/test.local/htdocs/wp-includes/post-template.php on line 845

线索?有人有什么想法吗?

【问题讨论】:

  • 不知道为什么 WP 会抛出错误,但不是 OC 导致问题
  • 也许发布header.tpl 的那部分内容可以帮助我们了解可能导致问题的原因...?说到header.tpl - 您是否将那些 wordpress 文件直接包含在模板中?
  • 您需要在 WordPress 中声明一个对象,并且需要为 WordPress 定义您的根。这是可怕的代码,在 OpenCart 的 .tpl 中插入原始 PHP 是个坏主意。插件和逻辑 MVC 更好。我发了一个帖子。 stackoverflow.com/questions/13208488/…
  • @TheBlackBenzKid 非常好的和广泛的答案!
  • shadyyx - 不要认为发布 header.tpl 会有帮助。 TheBlackBenzKid,这很有帮助,但它会拉出帖子,我不确定是否要修改菜单。杰 - 你是那个人,总是在那里回答,但这次......你的手累了吗?

标签: php wordpress opencart


【解决方案1】:

我相信你需要包含 wp-blog-header.php 而不是 wp-load 看看这个 http://www.problogdesign.com/wordpress/use-wordpress-as-a-php-framework-for-your-static-html-pages/

【讨论】:

  • 谢谢。这是一篇很好的帖子和文章。最好在此处插入带有所有标签的文章,并实际进行 mod 并自己练习,我相信答案是值得的。好链接+1
  • @Stuart 你在functions.php 文件中定义了菜单吗?你在执行任何代码之前安装了 wordpress 吗?
  • WP 和 OC 安装工作正常。店铺。用于 OC 安装和 www。对于WP安装,这可能是问题吗?我应该如何在 WP 函数文件中手动指定菜单,它适用于 WP 和商店。站点作为 test.php 文件。当它被放入其中一个 OC 页面时,我感到很糟糕。
  • 您需要在 functions.php 文件中注册您的菜单,例如 register_nav_menu('Test', 'Menu Label goes here');另外,如果您将 include('wp-blog-header.php') 添加到 test.php 中,您应该能够调用 bloginfo('title') 并且应该能够看到您的 wordpress 标题,因此请确保您可以调用其他wordpress函数
  • 还是同样的错误 致命错误:在 /...../wordpress/wp-includes/nav-menu-template.php 中的非对象上调用成员函数 get_queried_object()第 256 行
【解决方案2】:

“Constant DB_PASSWORD already defined”被抛出,因为 WP 和 OC 使用相同的数据库密码定义变量。您需要将 OC DB_PASSWORD 变量名称更改为 DB_PASSWORD_OC,然后在 index.php 中更改以下内容:

// 数据库

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); ...

遵守新的变量名:

// 数据库

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD_OC, DB_DATABASE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多