2012-03-19 5 views
0

申し訳ありませんので、javascriptとphpで設計されたカスタムページテンプレートがあります。 javascriptは、page1に含まれるdiv内のコンテンツを表示する2番目のカスタムページ(page2)テンプレートを挿入します。Wordpress - カスタムページには機能ファイルの問題を引き起こす2番目のカスタムページが含まれています

私が持っている問題は、問題の関数は、フックの一部として実行

Fatal error: Cannot redeclare contentAd() (previously declared in /home/content/70/8886870/html/wp-content/themes/myTheme/functions.php:20) in /home/content/70/8886870/html/wp-content/themes/myTheme/functions.php on line 23

です。これは、子テーマのfunctions.phpが親と同じであるという問題ではありません。これははるかに複雑です。

これはなぜ起こっているのか正確に知っています:page1はpage2のコンテナなので、function.phpの関数はページが読み込まれたときに実行されます。しかし、page2にはwp-blog-header.php(カスタムwpクエリとメタデータ呼び出しに必要)が含まれているため、javascriptがpage2を通ってその内容をpage1に挿入すると、非常に同じfunctions.phpが再度実行され、上記のエラーが発生します。

私はこれを回避する方法を模索しています。 JavaScriptは自動的にページロード時にajaxによって実行されます。ページ2はページ1の外側に存在しなければなりません - どのような方法でもマージすることはできません。 Page1とPage2は同じフックを使用しません。実際にPage2は、contentAd()関数を呼び出すことさえしません。これは、ajax呼び出しのためにfunctions.phpが複数回実行されるという問題です。

functions.phpが特定のページで実行されないようにする方法はありますか?それ以外の場合は、私はあなたの提案に開放されています!

のPage1:

<?php 
/* 
Template Name: Page1 
*/ 
?> 

<?php get_header(); ?> 

<script type="text/javascript" src="../wp-content/themes/myTheme/insert.js"></script> 
<div id="content"> 
    <div class="padder"> 
     <?php do_action('bp_before_blog_home') ?> 
     <?php do_action('template_notices') ?> 
     <div class="page" id="blog-latest" role="main"> 
     <div class="spacer" style="float:left;">&nbsp</div> 

     <div class="spacer" style="float:right;">&nbsp</div> 
      <ol class="row" id="updates"> 
       <div id="contained"></div> 
      </ol> 
     </div> 
    </div> 
</div> 
<?php get_sidebar() ?> 
<?php get_footer() ?> 

insert.js:

$(document).ready(function() { 
    $('#contained').load('../wp-content/themes/myThemes/page2.php'); 
}); 

ページ2:

<?php include("../../../wp-blog-header.php"); ?> 
A whole bunch of code sits in here but keeping the above line all by itself still produces the error hence my theory. 
+0

エラーはjavascriptのためではありません。 javascriptはサーバー側では実行されず、ブラウザーで実行されます。 jquery load()メソッドはそのスクリプトへのajaxリクエストを作成しています.wp-blog-header.phpをインクルードすると、wordpressは新しいブートストラップを実行しています。あなたの問題は他のところにあります。 wp-content/themes/myThemes/page2.phpにブラウザで直接アクセスするとどうなりますか? – Rob

+0

正常に読み込まれます。私はエラーがjavascriptではないことを知っている。このエラーは、page2がフェッチされたときにwordpressがfunctions.phpを2回呼び出すことにあります。 functions.phpは一度だけ初期化できるので、エラーが生成されます。 – Sweepster

答えて

1

あなたのfunctions.phpファイル内の関数があれば、ブロック内にラップされ、同様のええ、次へ?

if (! function_exists('contentAd')):

ない場合 - 彼らはする必要があります。このチェックでエラーが発生しないようにし、不要な処理を防止する必要があります。

+0

成功!コードがますます複雑になると、そのような単純な解決策を見逃すことは非常に簡単になります。ありがとうございました。 – Sweepster

関連する問題