EC-CUBE3.013 WordPressの新着情報をトップページに表示

EC-CUBE3.013の同階層にWordpressをインストールして、その新着情報をショップのトップページに表示してみようかな、と
EC-CUBE2系ではPHPタグが普通に使えたので、「require (‘wp-load.php’);」でwordpressのタグを埋め込んで、うにゃうにゃと表示させていたのだけれど…

Symfony…苦手

でも↓こういうのを見つけた
TwigPHPExtension.php

twigの中で強引にPHPの関数を頭に「php_」を入れることで使えるようにしちゃう荒技

1.「src/Eccube/Twig/Extension/EccubeExtension.php」の「public function getFunctions()」に以下を追記

new \Twig_SimpleFunction('php_*', array($this,'phpFunctions'),array('is_safe' => array('html'))),

2.続いて「class EccubeExtension extends \Twig_Extension」内に以下を追記

public function phpFunctions()
    {
        $arg_list = func_get_args();
        $function = array_shift($arg_list);
 
        if(is_callable($function)){
            return call_user_func_array($function, $arg_list);
        }

        $errMsg = 'Called to an undefined function : <b>php_' . $function . "</b> ";
        trigger_error($errMsg, E_USER_NOTICE);
        return NULL;
    }

3.サーバー内のどこでもいいので、以下のような内容の「news.php」ファイルを作成
 ※「wp-load.php」のパスを間違えないように

<?php
$webroot = $_SERVER['DOCUMENT_ROOT'];
require ($webroot.'/wp-load.php'); ?>
<style type="text/css">
#top_info {
	padding:0 10px 15px 18px;
	width:100%;
}
#top_info span {
	padding-right:15px;
}
#top_info li {
	line-height:2;
}
#top_info li a {
	text-decoration:none;
	color:#666;
	display:block;
}
#top_info li a:hover {
	color:#333;
}
</style>
                <ul id="top_info">
				<?php 
				$newslist = get_posts( array(
					'category_name' => 'information',
					'posts_per_page' => 5
				));
				foreach( $newslist as $post ):
					setup_postdata( $post );
				?>
                    <li><a href="<?php the_permalink(); ?>" target="_blank"><span><?php the_time('Y.n.d'); ?></span>
					<?php the_title(); ?></a></li>
				<?php
                    endforeach;
                    wp_reset_postdata();
                ?>
                </ul>

4.EC-CUBE内の新着情報を表示するブロック「app/template/default/Block/news.twig」を以下に書き換え

<div class="col-sm-9 news_contents">
    <div id="news_area">
        <h2 class="heading01">新着情報</h2>
        <div class="accordion">
            <div class="newslist">
			{{ php_file_get_contents('http://ドメイン名/news.php') }}
            </div>
        </div>
    </div>
</div>

いつかSymfonyを好きになれる日が来るのかな…

Comments

  1. はじめまして。自社サイトでWP連動をチャレンジ中でBlogを拝見しました!この場合、ECCUBEと同フォルダにインストールしたWPは、データベースを共有する設定でよいのでしょうか?現在WPインストール前で、教えて頂けると幸いです。

    1. コメントありがとうございます
      土日はほぼほぼPCを見ないので、遅くなってしまい申しわけございませんでした

      ご質問の件ですが、セキュリティの問題からECCUBEとWPは別DBを使用しております

      こちらは、ECCUBEとWPを連動させているわけではなく、ECCUBEのトップページに表示される標準の新着情報の表示が使いづらいので、WPを埋め込む方法について記載したものです

      WPの記事内にカートを設けたいということでしたら、↓こちらのようなプラグインをご利用になることをおすすめいたします
      https://www.ec-cube.net/products/detail.php?product_id=1378

Leave a Reply to うちの子ママ Cancel Reply

Your email address will not be published. Required fields are marked *

CAPTCHA