Как можно интегрировать CodeIgniter и WordPress таким образом, чтобы внешний вид и шаблон в блоге WordPress переносились на созданные на CodeIgniter страницы?
Первый шаг – переместить файлы CodeIgniter и WordPress в их собственный каталог.
После этого поставьте следующую строку вверху вашего файла index.php
CodeIgniter. Измените путь к wp-blog-header.php
если необходимо, чтобы указать на корневой каталог WordPress.
<?php require('../wp-blog-header.php');
Затем вы можете использовать следующие функции внутри своих представлений:
<?php get_header(); get_sidebar(); get_footer(); ?>
Другие вспомогательные функции также можно найти в документации WordPress, которая поможет вам в интеграции дизайна.
Когда я включил файл wp-blog-header.php в страницу index.php Codeigniter, у меня возникла проблема с тем, что site_url () определяется как в URL-помощнике URL-адреса, так и в WordPress. Я решил это, используя следующий код:
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 'HTTP / 1.0 404 Page not found' в заголовок.
Теперь его можно использовать функции WordPress для вызова CodeIgntier.
Вот еще один способ использовать шаблоны WordPress в проекте codeigniter. Это работает лучше для меня, поэтому я хотел бы поделиться им. Протестировано с помощью WordPress 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");
Сработайте с столкновением функций site_url, переопределив версию кода по умолчанию. Вам нужно будет изменить любое место, где вы использовали site_url()
в codeigniter, вместо этого используйте 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; }
не<?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.
Я использую WordPress для управления статьями на пользовательском веб-сайте электронной коммерции CI. CI – мой главный сайт. Структура каталогов следующая:
/application (CI) /... (directories like javascript, stylesheets ...) /system (CI) /wordpress /.htaccess /index.php (CI)
Я могу использовать функции WordPress в своих контроллерах CI, без того, чтобы мои URL-адреса были испорчены при добавлении следующего кода в начало индекса CI index.php :
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); }
Работает также при использовании библиотеки CI i18n Жером Яглал ( http://jeromejaglale.com/doc/php/codeigniter_i18n ).
если вы планируете использовать функцию кода ignitor site_url в своем коде или если вы выполняете слияние существующего сайта CI и WP … это может быть полезно:
в верхней части индекса CI.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); }
эффективно это позволяет использовать site_url в CI, поэтому, если вы уже добавили тонну ссылок и контента в свой проект, это может помочь вам.