【发布时间】:2012-04-03 13:30:39
【问题描述】:
好的,所以我有一个用 javascript 和 php 设计的自定义页面模板(我们称之为 page1)。 javascript 插入第二个自定义页面 (page2) 模板,该模板在名为 page1 的 div 中显示内容。
我的问题是
致命错误:无法在 /home/content/70/8886870/ 中重新声明 contentAd()(之前在 /home/content/70/8886870/html/wp-content/themes/myTheme/functions.php:20 中声明)第 23 行的 html/wp-content/themes/myTheme/functions.php
有问题的函数作为钩子的一部分运行。这不是子主题的functions.php 与父主题相同的问题。这要复杂得多..
我确切地知道为什么会发生这种情况:因为 page1 是 page2 的容器,所以 functions.php 中的函数在页面加载时运行(应该如此)。但是,由于 page2 包含 wp-blog-header.php(自定义 wp 查询和元数据调用所必需的),当 javascript 运行 page2 以将其内容插入 page1 时,完全相同的 functions.php 再次运行并导致上述错误。
我正在寻找解决此问题的方法。 javascript 通过 ajax 在页面加载时自动运行。 Page2 必须存在于 page1 之外 - 它们不能以任何方式合并。 Page1 和 Page2 不使用相同的钩子。实际上,Page2 甚至不调用函数 contentAd()。这完全是由于ajax调用导致functions.php多次执行的问题。
有没有办法阻止functions.php 在给定页面上执行?否则,我愿意接受您的建议!
第1页:
<?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;"> </div>
<div class="spacer" style="float:right;"> </div>
<ol class="row" id="updates">
<div id="contained"></div>
</ol>
</div>
</div>
</div>
<?php get_sidebar() ?>
<?php get_footer() ?>
插入.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.
【问题讨论】:
-
错误不是因为javascript。 javascript不在服务器端运行,它在浏览器中运行。 jquery load() 方法正在向该脚本发出 ajax 请求,当您包含 wp-blog-header.php 时,wordpress 正在执行新的引导。你的问题在别处。直接在浏览器中访问 wp-content/themes/myThemes/page2.php 会发生什么?
-
加载正常。我知道错误不是javascript。错误在于 wordpress 在获取 page2 时对 functions.php 进行了第二次调用。因为functions.php只能初始化一次,所以产生了错误。
标签: javascript ajax wordpress function include