类的全局句柄在插件中不可用?

时间:2017-08-06 作者:Vivek

我正在编写一个自定义插件,并使用wordpress页面上的短代码调用插件函数。

global $db_handle;
下面声明了类“DBController”全局的句柄。

if (isset($db_handle))
始终返回False。无法找出原因。我还必须澄清,我首先调用“[连接\\u数据库]”,然后调用“[加载\\u下拉内容=”客户“]”任何帮助都将不胜感激!完整代码如下:
global $db_handle;

function vc_connect_to_database()
{
    require_once("dbcontroller.php");       # Instantiate DB COntrolling functions 
    $db_handle = new DBController();
    $connection = $db_handle->connectDB();
    if (!$connection)
    {
        return \'Unable to connect to database\';
    } 
    else
    { 
        return \'<script>alert("Connected to the database successfully.")</script>\';
    #       return \'<h6>"Database connect successful. This is where the customers list will appear"</h6>\';  
    }   
}

function vc_load_dropdown($atts, $content=null)
{
    $atts = shortcode_atts( array(\'content\' => \'customer\'), $atts );
    if ($atts[ \'content\' ] == \'customer\')
    {
        $query = \'SELECT CustomerID, FirstName, LastName FROM customers ORDER BY FirstName, LastName\';
        if (isset($db_handle))
        {
            return \'DB Handle is available\';
        }
        else
        {
            return \'DB Handle is NOT available\';            
        }
#       $results = $db_handle->runQuery($query);
    } 
}

add_shortcode(\'load_dropdown\', \'vc_load_dropdown\');
add_shortcode(\'connect_database\', \'vc_connect_to_database\');

1 个回复
SO网友:Mark Kaplun

您的核心问题是使用了两个短代码。短代码不是一种编程语言,因此不应使用。短代码应该以一致的自包含方式生成HTML。如果内容中没有短代码B,短代码a就无法工作,则表明您做错了。

从编码角度来看,您永远不应该使用全局变量。如果需要缓存某些资源,请使用访问器函数,该函数将值存储为静态值,并仅在需要时对其进行初始化。此外,您并没有在函数中使用好的前缀,这可能会导致与core和其他插件发生冲突,但实际上,要想找出好的前缀,只需使用名称空间即可。

结束

相关推荐

Show the excerpt in a loop

我想用这个循环显示最后3篇文章。这很有效,但我不知道为什么,但摘录总是一样的。我做错了什么? <?php $args = array( \'numberposts\' => \'3\' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ){ ?> <div class=\"