Echo在头部执行4次

时间:2015-04-08 作者:clockwiseq

我创建了一个插件作为测试,现在遇到了一些麻烦。代码执行了4次,并将echo<head> 页面的标记。我执行echo 是因为我在使用另一个插件时遇到了问题,无法理解为什么我的代码被执行了4次。因此,我创建了一个简单的示例,我可以复制并希望能够修复(在您的帮助下)。现在来看看代码。。。

我的职能。php:

/*
Plugin Name: What Have I Done?
Plugin URI: http://www.myplugintest4times.com
Description: This is just a test for replicated html in the head.
Version: 1.0.0
Author: Someone Special
Author URI: http://www.somewhereoutthere.com
 */

// Definitions
define(\'MY_PLUGIN_PATH\' , plugin_dir_path(  __FILE__  ));
define(\'MY_PLUGIN_URL\', get_option(\'siteurl\') . \'/wp-content/plugins/testplugin\');

// Classes
require_once(dirname(__FILE__) . \'/includes.php\');
我的包括。php:

function mytest_filter($content) {
    global $post;

    echo "<p>my test again</p>";

    $testpage = get_page_by_title(\'Test\');
    $subtestpage = get_page_by_title(\'SubTest\');

    if ($post->ID == $testpage->ID || wp_get_post_parent_id($subtestpage) == $testpage->ID) { // this is a test page, filter the content...
        switch($post->ID) {
            case $testpage->ID:
                echo "this is the test page"; // return $html;
                break;
            case $subtestpage->ID:
                echo "this is the sub test page (test is the parent)"; // return $html;
                break;
        }
      }
      else {
            return $content;
      }
} 

add_filter(\'the_content\', \'mytest_filter\');
现在,我在网站上有两个页面,一个叫做Test,另一个叫做SubTest。当这些页面中的任何一个是当前页面时$post 对象,我正在输出我的内容,而不是WordPress的$content. 我已经做了将近3年了,所以如果这些年来我一直做错了,我需要一些指导。

生成的html为:

<p>my test again</p>
this is the test page
<p>my test again</p>
this is the test page
<p>my test again</p>
this is the test page
<p>my test again</p>
this is the test page
当查看页面的源代码时,这一切都在<head>. 它还将内容正确地附加到<body> 标签,但另一个在那里,会引起头痛,因为当我POST, 执行4次。那么,这不是在页面上插入/替换我的内容的正确方法吗?

1 个回复
最合适的回答,由SO网友:kovshenin 整理而成

过滤器应返回,而不是回波。

function my_content( $content ) {
    // Something something
    $content = \'my content\';
    return $content;
}
add_filter( \'the_content\', \'my_content\' );
您可以回声,但需要输出缓冲,如下所示:

function my_content( $content ) {
    // Something something
    ob_start();

    echo \'my content\';

    $content = ob_get_contents();
    ob_end_clean();
    return $content;
}
add_filter( \'the_content\', \'my_content\' );
此外,您在head部分中看到输出的原因是,过滤器可能正在head部分的某个地方使用,可能是由某个插件使用的,因此请小心,因为您可能会覆盖比您希望的更多的内容。

希望这有帮助。

结束

相关推荐

Execute php in pages

我需要在wordpress中执行我的个人php代码来打印mysql数据库中的数据。我只能在页面上执行。我的想法是创建一个文件页pagename。php,复制页面主体。php模板并更改此代码:<?php while ( have_posts() ): the_post(); ?> <article <?php post_class(\'group\'); ?>> <?php get_temp