web-dev-qa-db-fra.com

Existe-t-il un objet info blog?

Les fonctions get_bloginfo () et bloginfo () renvoient toutes deux des informations sur le blog, mais y accéder à chaque fois semble inutile. Existe-t-il une fonction qui renvoie l'objet bloginfo en tant qu'objet avec des propriétés?

Plus d'infos:
J'ai des jetons dans mon balisage et je souhaite les remplacer par les informations du blog. Étant donné que je remplace des jetons sur plusieurs messages, je ne souhaite pas appeler get_bloginfo("name"); plusieurs fois. Au lieu de cela, je veux le mettre dans un objet que je peux réutiliser pour chaque appel.

4
1.21 gigawatts

Voici ma solution de contournement s'il n'en existe pas:

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

La raison pour laquelle j'ai choisi cette réponse est que je dois accéder aux propriétés de l'objet plusieurs fois. Donc, une fois que cela est créé, les appels suivants obtiennent les valeurs n'appelant pas les fonctions de manière répétée, ce qui peut être coûteux ou non. Je ne sais pas.

En outre, la question et la réponse ne demandent pas "la meilleure" façon de faire les choses mais de demander comment faire une chose spécifique et cette réponse correspond à la chose spécifique mentionnée dans la question. Je dis tout cela parce que les gens votent tout le temps pour ne pas faire les choses comme elles ont été enseignées ou de la "meilleure" façon.

Mise à jour: j'ai ajouté un cas d'utilisation afin que vous puissiez voir comment j'utilise la fonction et la méthode. Je ne fais pas toujours ça mais je pense que ça va expliquer les choses.

0
1.21 gigawatts

Tiré du code source de get_bloginfo() , voici une classe très très simple que vous pouvez utiliser et définir à votre guise.

J'ai décidé d'utiliser des méthodes, rendre public les propriétés d'une classe n'est vraiment pas très bon codage et n'est pas recommandé. Je sais que Wordpress prospère sur les propriétés publiques, mais c'est Wordpress.

Voici la classe (que vous devriez convertir pour utiliser un espacement de nom approprié, comme je l’ai dit, c’est une classe extrêmement simple et claire)

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

Vous pouvez utiliser la classe comme suit:

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

Les résultats suivants ont été testés lors de l’installation de test.

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
4
Pieter Goosen

Ces réponses sont toutes plus lentes que d'utiliser simplement get_bloginfo normalement.

La plupart des choses que la fonction get_bloginfo peut obtenir utilisent le système de mise en cache mémoire WordPress intégré. Ils ne souffrent généralement pas de problèmes de rapidité étant appelés à plusieurs reprises, car des éléments tels que les options et autres éléments provenant de la base de données sont mis en cache lors de la première extraction des données.

Cependant, le fait de le nommer une foule de fois pour une sorte d’étape de "configuration" comme celle-ci à l’avance fait en sorte de faire un tas de travail inutile pour interroger toutes ces données, dès le départ, surtout si ce sont des données que vous ne connaissez pas. Pas vraiment besoin d'avoir.

1
Otto