【问题标题】:Wordpress - Custom page includes second custom page causing problems with functions fileWordpress - 自定义页面包括第二个自定义页面,导致函数文件出现问题
【发布时间】: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;">&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() ?>

插入.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


【解决方案1】:

functions.php 文件中的函数被包装在一个 if 块中,类似于以下内容,是吗?

if ( ! function_exists( 'contentAd' ) ):

如果不是 - 他们应该是。此检查应防止该错误发生并防止不必要的处理。

【讨论】:

  • 成功!当代码变得越来越复杂时,很容易错过这样一个简单的解决方案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2014-05-14
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多