Is there a blog info object?

时间:2015-10-27 作者:1.21 gigawatts

功能get_bloginfo()和bloginfo()都返回有关博客的信息,但每次访问它似乎都是不必要的。是否有一个函数可以将bloginfo作为具有属性的对象返回?

More Info:
我的标记中有标记,我想用博客信息替换这些标记。因为我在多个帖子上替换代币,所以我不想打电话get_bloginfo("name"); 多次。相反,我想把它放到一个对象中,我可以在每次调用中重用它。

3 个回复
最合适的回答,由SO网友:1.21 gigawatts 整理而成

如果不存在,我的解决方法如下:

/**
 * Get an object with blog info values
 */
function getBlogInfo() {
    $info = new stdClass();

    $info->name                 = get_bloginfo("name");
    $info->description          = get_bloginfo("description");
    $info->wpurl                = get_bloginfo("wpurl");
    $info->url                  = get_bloginfo("url");
    $info->admin_email          = get_bloginfo("admin_email");
    $info->charset              = get_bloginfo("charset");
    $info->version              = get_bloginfo("version");
    $info->html_type            = get_bloginfo("html_type");
    $info->text_direction       = get_bloginfo("text_direction");
    $info->language             = get_bloginfo("language");
    $info->stylesheet_url       = get_bloginfo("stylesheet_url");
    $info->stylesheet_directory = get_bloginfo("stylesheet_directory");
    $info->template_url         = get_bloginfo("template_url");
    $info->template_directory   = get_bloginfo("template_url");
    $info->pingback_url         = get_bloginfo("pingback_url");
    $info->atom_url             = get_bloginfo("atom_url");
    $info->rdf_url              = get_bloginfo("rdf_url");
    $info->rss_url              = get_bloginfo("rss_url");
    $info->rss2_url             = get_bloginfo("rss2_url");
    $info->comments_atom_url    = get_bloginfo("comments_atom_url");
    $info->comments_rss2_url    = get_bloginfo("comments_rss2_url");
    $info->siteurl              = home_url();
    $info->home                 = home_url();

    return $info;
}

// the following is pseudo code to give you example of what I\'m doing
$info = getBlogInfo();

for ($i=0;i<count(posts);$i++) {
    $post = $posts[i];
    $value = $post->value.replace("{name}", $info->name);
    $value = $post->value.replace("{description}", $info->description);
    $postsArray.push($post);
}
我之所以选择这个作为答案,是因为我需要多次访问对象的属性。因此,一旦创建了后续调用,就会得到不重复调用函数的值,这可能会很昂贵,也可能不会很昂贵。我不知道。

此外,问题和答案并不是问你做事情的“最佳”方式,而是问你如何做一件具体的事情,这个答案符合问题中提到的具体事情。我之所以这么说,是因为人们总是投票反对不按他们被教导的方式或“最好”的方式做事。

更新:我添加了一个用例,以便您可以看到我是如何使用函数和方法的。我并不总是这样做,但我认为这可以解释一切

SO网友:Pieter Goosen

摘自的源代码get_bloginfo(), 这是一个非常简单的类,您可以根据自己的意愿使用和扩展它。

我决定使用方法,从类中公开属性确实不是很好的编码,也不推荐使用。我知道Wordpress是靠公共财产发展起来的,但那就是Wordpress。

下面是一个类(,您应该将其转换为使用适当的名称空间,正如我所说的,这是一个非常简单的类)

class GetBlogInfo
{
    // Return the home URL
    public function homeURL() 
    {
        return home_url();
    }

    // Return the site URL
    public function siteURL() 
    {
        return site_url();
    }

    // Return the blog description
    public function description() 
    {
        return get_option(\'blogdescription\');
    }

    // Get the feed links
    public function getFeedLink( $link = \'\' ) 
    {
        switch( $link ) {
            case \'rdf_url\':
                $output = \'rdf\';
                break;
            case \'rss_url\':
                $output = \'rss\';
                break;
            case \'rss2_url\':
                $output = \'rss2\';
                break;
            case \'atom_url\':
                $output = \'atom\';
                break;
            case \'comments_atom_url\':
                $output = \'comments_atom\';
                break;
            case \'comments_rss2_url\':
                $output = \'comments_rss2\';
                break;
            default:
                $output = false;
                break;
        }

        if ( $output ) {
            return get_feed_link( $output );
        } else {
            return false;
        }
    }

    // Return the blog options. Default is name
    public function getOptions( $option = \'name\' ) 
    {
        switch( $option ) {
            case \'admin_email\':
                $output = \'admin_email\';
                break;
            case \'charset\':
                $output = \'blog_charset\';
                break;
            case \'html_type\':
                $output = \'html_type\';
                break;
            case \'name\':
            default:
                $output = \'blogname\';
                break;
        }

        return get_option( $output );
    }

    // Return the blog language setting
    public function language() 
    {
        return str_replace( \'_\', \'-\', get_locale() );
    }

    // Return the Wordpress version
    public function version() 
    {
        global $wp_version;
        return $wp_version;
    }

    // Return the pingback URL
    public function pingbackURL() 
    {
        return site_url( \'xmlrpc.php\' );
    }

    // Return the path to main stylesheet
    public function stylesheetURL() 
    {
        return get_stylesheet_uri();
    }

    // Return the stylesheet directory uri
    public function stylesheetDirectory() 
    {
        return get_stylesheet_directory_uri();
    }

    // Return the template directory uri
    public function templateDirectory() 
    {
        return get_template_directory_uri();
    }
}
您可以按如下方式使用该类:

$q = new GetBlogInfo();
echo $q->homeURL() . \'</br>\';
echo $q->siteURL() . \'</br>\';
echo $q->description() . \'</br>\';
echo $q->getFeedLink( \'rdf_url\' ) . \'</br>\';
echo $q->getFeedLink( \'rss_url\' ) . \'</br>\';
echo $q->getFeedLink( \'rss2_url\' ) . \'</br>\';
echo $q->getFeedLink( \'atom_url\' ) . \'</br>\';
echo $q->getFeedLink( \'comments_atom_url\' ) . \'</br>\';
echo $q->getFeedLink( \'comments_rss2_url\' ) . \'</br>\';
echo $q->getOptions( \'name\' ) . \'</br>\';
echo $q->getOptions( \'admin_email\' ) . \'</br>\';
echo $q->getOptions( \'charset\' ) . \'</br>\';
echo $q->getOptions( \'html_type\' ) . \'</br>\';
echo $q->language() . \'</br>\';
echo $q->version() . \'</br>\';
echo $q->pingbackURL() . \'</br>\';
echo $q->stylesheetURL() . \'</br>\';
echo $q->stylesheetDirectory() . \'</br>\';
echo $q->templateDirectory() . \'</br>\';
此输出在我的测试安装中测试如下

http://localhost/wordpress
http://localhost/wordpress
Trots Afrikaans - Praat Afrikaans of hou jou bek!!!
http://localhost/wordpress/feed/rdf/
http://localhost/wordpress/feed/rss/
http://localhost/wordpress/feed/
http://localhost/wordpress/feed/atom/
http://localhost/wordpress/comments/feed/atom/
http://localhost/wordpress/comments/feed/
Pieter Goosen
[email protected]
UTF-8
text/html
af-AF
4.3.1
http://localhost/wordpress/xmlrpc.php
http://localhost/wordpress/wp-content/themes/pietergoosen2014/style.css
http://localhost/wordpress/wp-content/themes/pietergoosen2014
http://localhost/wordpress/wp-content/themes/pietergoosen2014

SO网友:Otto

这些答案都比正常使用get\\u bloginfo慢。

get\\u bloginfo函数可以获取的大部分内容都使用内置的WordPress内存缓存系统。它们通常不会因为被多次调用而受到速度问题的困扰,因为来自数据库的选项和其他内容在第一次检索数据时就会被缓存。

然而,提前多次调用这种“设置”步骤确实会使它在查询所有要开始的数据时做大量不必要的工作,尤其是如果其中大部分是您实际上不需要的数据。