チェ・ゲバムラの日記

脱犬の道を目指す男のブログ

【ECCUBE3.0.13】ECCUBEトップにWordpress記事一覧を出力し、パラメータを取得してECCUBE内に詳細記事も出力させる方法

大変でした。
でも出来た。

やったこ

ECCUBEトップにWordpress一覧出力

まずはここから。
強引なやり方みたいだけどとりあえず出来るならいいかと。
下記のサイト通りで出来た。

EC-CUBE3.013 WordPressの新着情報をトップページに表示 – うちの子が言うことには


ただ自分で少し改造したので下記にも記載しておく。

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;
    }

Wordpress記事IDのパラメータを取得して、投稿内容をECCUBE内に詳細記事として出力させる

これは出来ないかと思ったけど出来た。

1、概念としてはnewsdetail.twigを普通に管理画面で作り、Twigファイル内から上記トップページに表示したのと同じようにwordpressを呼び出す為のPHPファイルを読みだす。(newsdetail.php
記載する際にパラメータを付与するが、付与の仕方で詰まった。
下記のように変数をつなげる時は~を使うらしい。
いろいろやったけどこんだけ。。。
でも出来たからいいや。

    <!--変数定義-->
	{% set hoge = 2 %}
    <!--変数出力-->
	{{ hoge }}
    <!--GETパラメータ取得して出力-->
    {% set p = app.request.get('p') %}

    <!--パラメータを付与してWP読み込み-->
	{% set url = app.request.schemeAndHttpHost() ~ '/wp/newsdetail.php?p=' ~ p %}
	{{ php_file_get_contents(url) }}


2.newsdetail.php

<?php
$webroot = $_SERVER['DOCUMENT_ROOT'];
require ($webroot.'/wp/wp-load.php'); ?>
	<?php 
	$newslist = get_posts( array(
	    'posts_per_page' => 1 //表示する記事数
	));
	foreach( $newslist as $post ): setup_postdata( $post ); ?>
    <?php
    // 記事のカテゴリー情報を取得する
    $cat = get_the_category();
    
    // 取得した配列から必要な情報を変数に入れる
    $cat_name = $cat[0]->cat_name; // カテゴリー名
    $cat_slug  = $cat[0]->category_nicename; // カテゴリースラッグ

    //Advancedカスタムフィールド取得
    $date = get_field('date');//日時

    //パラメータが渡された時のみ変数にパラメータとなる数字格納
    if(isset($_GET['p'])) {
        $para = $_GET['p'];
    }
    //投稿IDを指定
    $post = get_post($para);
    //指定したIDの本文を格納
    $post_content = $post->post_content;
    ?>

    <!-- キービジュアル -->
    <div id="keyVisual" class="panel">
        <div class="title pcClass">
            <figure>
                <h2>
                    <img src="/assets/img/pc/news/h2_title.png" alt="NEWS">
                </h2>
            </figure>
        </div>
    </div>

    <!-- メイン -->
    <section id="main_contents">
        <div class="innerEC">
        	<div id="pankuzu">
        	    <span>
        	        <a href="../">TOP</a>
        	    </span>
        	    <span class="bar">
        	        /
        	    </span>
        	    <span>
				NEWS一覧
        	    </span>
        	</div>
			<div id="main_inner">

			<!-- NEWS -->
    <section id="newsall">
        <div class="inner">
            <h3>
                <img src="/assets/img/pc/h2_news_top.png" alt="NEWS">
            </h3>            
<?php echo $post_content;?>
    <ul>
        <li><p><?php echo $date; ?></p></li>
        <li><div class="cate <?php echo $cat_slug ?>"><?php echo $cat_name; ?></div>
    </ul>
	<?php
    endforeach;
    wp_reset_postdata();
    ?>
            </div>
    </section>
	
        	</div>
        </div>
    </section>