如何将WordPress模板与CodeIgniter整合

如何整合CodeIgniter和WordPress,使WordPress博客的外观和感觉/模板被转移到CodeIgniter创build的页面上?

第一步是将CodeIgniter和WordPress文件移动到他们自己的目录中。

之后,将下面的行放在CodeIgniter的index.php文件的顶部。 根据需要将path更改为wp-blog-header.php ,以指向您的WordPress根目录。

 <?php require('../wp-blog-header.php'); 

然后,您可以在视图中使用以下function:

 <?php get_header(); get_sidebar(); get_footer(); ?> 

其他帮手function也可以在WordPress的文档中find,这可以帮助您集成devise。

当我在Codeigniter的index.php页面中包含wp-blog-header.php文件时,我遇到了codeigniter的URL helper和WordPress中定义了site_url()的问题。 我解决了这个使用下面的代码:

 require('blog/wp-blog-header.php'); add_filter('site_url', 'ci_site_url', 1); function ci_site_url() { include(BASEPATH.'application/config/config.php'); return $config['base_url']; } header("HTTP/1.0 200 OK"); 

需要添加最后一行,因为WordPress文件在标题中添加了一个HTTP响应标题'HTTP / 1.0 404 Page not found'。

现在可以使用WordPress函数来调用CodeIgntier。

这是在codeigniter项目中使用WordPress模板的另一种方法。 这对我更好,所以我想分享它。 testingWordPress 3.3.1和Codeigniter 2.1。

目录结构:

 / - WordPress /ci/ - codeigniter 

/ci/index.php(CI索引文件的顶部)

 $wp_did_header = true; if ( defined('E_RECOVERABLE_ERROR') ) error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR); else error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING); require_once("../wp-config.php"); 

通过覆盖默认的codeigniter版本来处理site_url函数冲突。 您将需要更改您在codeigniter中使用ci_site_url()任何位置,以改为使用ci_site_url()

/ci/application/helpers/MY_url_helper.php

 <?php function anchor($uri = '', $title = '', $attributes = '') { $title = (string) $title; if ( ! is_array($uri)) { $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? ci_site_url($uri) : $uri; } else { $site_url = ci_site_url($uri); } if ($title == '') { $title = $site_url; } if ($attributes != '') { $attributes = _parse_attributes($attributes); } return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>'; } if ( ! function_exists('ci_site_url')) { function ci_site_url($uri = '') { $CI =& get_instance(); return $CI->config->site_url($uri); } } function current_url() { $CI =& get_instance(); return $CI->config->ci_site_url($CI->uri->uri_string()); } function anchor_popup($uri = '', $title = '', $attributes = FALSE) { $title = (string) $title; $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? ci_site_url($uri) : $uri; if ($title == '') { $title = $site_url; } if ($attributes === FALSE) { return "<a href='javascript:void(0);' onclick=\"window.open('".$site_url."', '_blank');\">".$title."</a>"; } if ( ! is_array($attributes)) { $attributes = array(); } foreach (array('width' => '800', 'height' => '600', 'scrollbars' => 'yes', 'status' => 'yes', 'resizable' => 'yes', 'screenx' => '0', 'screeny' => '0', ) as $key => $val) { $atts[$key] = ( ! isset($attributes[$key])) ? $val : $attributes[$key]; unset($attributes[$key]); } if ($attributes != '') { $attributes = _parse_attributes($attributes); } return "<a href='javascript:void(0);' onclick=\"window.open('".$site_url."', '_blank', '"._parse_attributes($atts, TRUE)."');\"$attributes>".$title."</a>"; } function redirect($uri = '', $method = 'location', $http_response_code = 302) { if ( ! preg_match('#^https?://#i', $uri)) { $uri = ci_site_url($uri); } switch($method) { case 'refresh' : header("Refresh:0;url=".$uri); break; default : header("Location: ".$uri, TRUE, $http_response_code); break; } exit; } 

您现在可以使用WordPress get_header()和/或get_footer()函数在CI项目中绘制模板。

我正在使用Wordpresspipe理自定义CI电子商务网站中的文章。 CI是我的主要网站。 目录结构如下:

  /application (CI) /... (directories like javascript, stylesheets ...) /system (CI) /wordpress /.htaccess /index.php (CI) 

我可以在我的CI控制器中使用Wordpress函数,而不会在将以下代码添加到CI的index.php顶部时导致我的URL被搞乱:

 require_once './wordpress/wp-blog-header.php'; add_filter('site_url', 'ci_site_url', 1); function ci_site_url($uri = '') { $CI =& get_instance(); $uri = ltrim(str_replace($CI->config->base_url('wordpress/'), '', $uri),'/'); // "wordpress/" is in my case the name of the directory where I installed WordPress. See directory structure above. return $CI->config->site_url($uri); } 

在使用JérômeJaglale使用CI i18n库时也可以使用( http://jeromejaglale.com/doc/php/codeigniter_i18n )。

如果您打算在您的代码中使用代码点火器site_url函数,或者如果您正在合并现有的CI站点和WP …这可能会有所帮助:

在CI index.php的顶部:

 require_once '../wp-blog-header.php'; add_filter('site_url', 'ci_site_url', 4); function ci_site_url($url, $path, $orig_scheme, $blog_id) { $CI =& get_instance(); $new_path = str_replace("YOURSITEURLGOESHERE", "", $url); return $CI->config->site_url($new_path); } 

有效地,这允许你在CI中使用site_url,所以如果你已经添加了大量的链接和内容到你的项目中,它可能会帮助你。