【发布时间】:2014-10-27 03:58:09
【问题描述】:
我正在尝试将 WordPress 标头引入我的应用程序。 我有这个类与 Wordpress 连接并提取我需要的 HTML:
namespace XLite\Module\Guru\WordPress;
/**
* Main module
*/
class WordPress extends \XLite\Base\Singleton
{
/**
* Get WordPress header and body class
*
* @return array
*/
public static function getWPHeader($element){
$WP = array();
require_once(__DIR__ . '../../../../../../../../../wp-blog-header.php');
$wpHeader = self::ob_get_call('get_header');
if (!isset($dom)) {
$dom = new \domDocument;
}
$dom->loadHTML($wpHeader);
//Get body class
$bodyElements = $dom->getElementsByTagName("body");
foreach ($bodyElements as $node) {
$bodyClass = substr($node->getAttribute('class'), 5);
}
$WP['bodyClass'] = $bodyClass;
$headerElement = $dom->getElementById("masthead");
$WP['header'] = $dom->saveHTML($headerElement);
return $WP;
}
}
而且这段代码会执行得很好。我在另一个文件中引用它,如下所示:
namespace XLite\Module\Guru\WordPress\View\Header\Customer;
/**
* Header
*
* @ListChild (list="body", zone="customer", weight="10")
*/
class Header extends \XLite\View\Menu\Customer\ACustomer
{
/**
* Get WordPress Header
*
* @return html
*/
public function getWPHeader(){
$wpHeader = \XLite\Module\Guru\WordPress\WordPress::getWPHeader();
echo $wpHeader['header'];
}
}
这行得通!我可以回显标题 HTML。但是我需要再次访问同一个类,以便可以附加正文样式:
namespace XLite\Module\Guru\WordPress\View;
/**
* Replace Body Template
*/
abstract class Controller extends \XLite\View\ControllerAbstract implements \XLite\Base\IDecorator
{
/**
* Get WordPress Body class
*
* @return string
*/
public function getWPBodyClass(){
$wpHeader = \XLite\Module\Guru\WordPress\WordPress::getWPHeader();
echo $wpHeader['bodyClass'];
}
}
当两个文件都处于活动状态时,只有一个显示来自 WordPress 类的内容。如果我注释掉或删除任何一个查看器类,另一个会出现。我认为我只需要访问一次类,并将我需要的数据存储在一个实例中。但我真的迷路了,代码实际上更复杂,这让我头晕目眩。 :-) 在此先感谢,我已经潜伏在这个网站上将近 10 年了。
【问题讨论】:
标签: php wordpress oop namespaces