Existe um objeto de informações do blog?

4

As funções get_bloginfo () e bloginfo () retornam informações sobre o blog, mas acessá-lo a cada vez parece desnecessário. Existe uma função que retornará o bloginfo como um objeto com propriedades?

Mais informações:
Tenho tokens na minha marcação e quero substituir esses tokens pelas informações do blog. Como estou substituindo tokens por várias postagens, não quero chamar get_bloginfo("name"); várias vezes. Em vez disso, quero colocá-lo em um objeto que eu possa reutilizar para cada chamada.

    
por 1.21 gigawatts 27.10.2015 / 07:38

3 respostas

0

Aqui está minha solução alternativa se não existir um:

/**
 * 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);
}

A razão pela qual escolhi isso como resposta é porque preciso acessar as propriedades do objeto mais de uma vez. Assim, uma vez criadas, as chamadas subsequentes estão recebendo os valores que não chamam as funções repetidamente, o que pode ou não ser caro. Eu não sei.

Além disso, a pergunta e a resposta não é perguntar "da melhor maneira" como você pode fazer as coisas, mas sim como fazer uma coisa específica e essa resposta se encaixa nessa coisa específica mencionada na pergunta. Estou dizendo tudo isso porque as pessoas de baixo votam o tempo todo por não fazer as coisas da maneira como foram ensinadas ou "da melhor maneira".

Update: Eu adicionei um caso de uso para que você possa ver como estou usando a função e o método. Eu nem sempre faço isso, mas acho que isso explicará as coisas.

    
por 1.21 gigawatts 27.10.2015 / 09:10
4

Extraído do código-fonte de get_bloginfo() , aqui está uma classe muito simples que você pode usar e extensão à sua vontade.

Eu decidi fazer uso de métodos, tornando as propriedades públicas de uma classe realmente não é ótimo codificar e não é recomendado. Eu sei Wordpress prosperar em propriedades públicas, mas isso é Wordpress.

Aqui está a classe ( que você deve converter para usar o namespace apropriado, como eu disse, esta é uma classe extremamente simples e simples )

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();
    }
}

Você pode usar a classe da seguinte forma:

$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>';

Isso gera o seguinte conforme testado na minha instalação de teste

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
test@test.com
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
    
por Pieter Goosen 27.10.2015 / 17:51
1

Essas respostas são mais lentas do que apenas usar o get_bloginfo normalmente.

A maioria das várias coisas que a função get_bloginfo pode usar o sistema de cache de memória do WordPress. Eles geralmente não sofrem problemas de velocidade de serem chamados várias vezes, porque coisas como opções e outras coisas que vêm do banco de dados são armazenadas em cache na primeira vez que os dados são recuperados.

No entanto, chamá-lo várias vezes para algum tipo de passo de "configuração" como este com antecedência faz com que ele faça um monte de trabalho desnecessário na consulta de todos os dados para começar, especialmente se a maioria for de dados. você realmente não precisa ter.

    
por Otto 27.12.2015 / 11:19

Tags