正在转储unctions.php中的自定义pre_get_post函数中的变量,返回空

时间:2014-08-15 作者:Daniel Dropik

Problem Summary:

我正在使用FireHP在自定义函数中分析变量,但它不会像我预期的那样在控制台中显示它们的内容。我还使用了var\\u dump(),它返回NULL。

问题详细信息:我正在使用FireHP,正如@brasofilo所描述的,如上所示https://wordpress.stackexchange.com/a/71599/41479 . 这通常非常有用,但我不明白为什么有时我无法在控制台中看到变量的内容。

这是一个具体的例子page-sr2.php:

<?php get_header(); ?>
    <div id="main">
        <div id="primary">
            <div id="content" role="main">
                <?php while ( have_posts() ) : the_post(); ?>
                    <?php get_template_part( \'content\', \'page\' ); ?>
                    <?php get_template_part(\'nav_menu\', \'explore\');?>

                <?php logit( $wp_query, \'$wp_query:\' ); ?> /*Logit function from @brasofilo*/
                <?php logit( $variable, \'$variable: \'); ?>
                <?php var_dump($variable); ?>/* This outputs NULL on the page*/
                <?php endwhile; // end of the loop. ?>

            </div><!-- #content -->
            <?php// get_sidebar(); ?>
            <div class="clear"></div>

        </div><!-- #primary -->

    </div>


<?php get_footer(); ?>

</div>
<小时>英寸functions.php 我正在使用自定义的pre\\u get\\u posts操作:

add_action(\'pre_get_posts\', \'page_sr2_pgp\');

function page_sr2_pgp( $query )
{

    if( is_page(\'sr2\') ){
        return $query;
    }

    //global $variable;   //tried this, didn\'t help
    $variable ="something";
    logit( $variable, \'$variable: \'); 

    if( isset($_GET[\'yr\']) )
    {

        $query->set(\'meta_key\', \'yr\');
        $query->set(\'meta_value\', $_GET[\'year\']);

    }   

    // always return
    return $query;

}
结果是logit() 适用于$wp_query, 但不是为了$variable.

Screenshot of console, page-sr2.php

Note: 是的,我打电话来logit( $variable, \'$variable: \'); 在两者中page-sr2.php 在函数中page_sr2_pgp 的内部functions.php. 我这样做是因为我不知道哪个位置是正确的,我也不相信这会造成问题。

1 个回复
SO网友:sakibmoon

It显示器NULL, 因为它不存在。

如果要在定义全局变量的位置以外的其他函数中使用全局变量,则必须再次将其声明为全局变量。如果省略global关键字,它将在该函数作用域中定义,而不是在全局作用域中定义。

在您的functions.php 使用global 关键字

add_action(\'pre_get_posts\', \'page_sr2_pgp\');

function page_sr2_pgp( $query )
{
    ...
    ...
    //uncomment this line
    global $variable;
    $variable ="something";
    logit( $variable, \'$variable: \'); 

    ...
    ...
    return $query;

}
在中page-sr2.php, 重新声明为global

<?php get_header(); ?>
    <div id="main">
          ...
          ...
                <?php logit( $wp_query, \'$wp_query:\' ); ?> /*Logit function from @brasofilo*/
                <?php global $variable; ?>
                <?php logit( $variable, \'$variable: \'); ?>
          ...
          ...
    </div>

结束

相关推荐

Debug Performance Issues

我有一个WordPress博客,我在Dream Host上主持了几年了。最近(去年)我的网站经常宕机。通过Dream Host,我发现我正在使用我的CPU限制,他们正在杀死我的进程。这种情况过去一天发生两次,但我能把它减少到一周一次。我将我的缓存插件从W3 Total缓存交换到另一个缓存,并删除了一些插件。我有时还是会遇到问题。老实说,我是ASP。NET开发人员,所以我习惯于调试IDE和CMS应用程序中的工具。我如何才能弄清CPU问题的根源?有WordPress工具吗?此外,我的网站是为URL模式配置的h