¿Hay un objeto de información de blog?

4

Las funciones get_bloginfo () y bloginfo () devuelven información sobre el blog pero acceder a ella cada vez parece innecesario. ¿Hay una función que devolverá el bloginfo como un objeto con propiedades?

Más información:
Tengo tokens en mi marca y quiero reemplazar esos tokens con la información del blog. Ya que estoy reemplazando tokens en varias publicaciones, no quiero llamar a get_bloginfo("name"); varias veces. En su lugar, quiero ponerlo en un objeto que pueda reutilizar para cada llamada.

    
pregunta 1.21 gigawatts 27.10.2015 - 07:38

3 respuestas

0

Aquí está mi solución alternativa si no existe una:

/**
 * 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 razón por la que elegí esto como respuesta es porque necesito acceder a las propiedades del objeto más de una vez. Entonces, una vez que se crea, las llamadas subsiguientes obtienen los valores que no llaman repetidamente a las funciones, lo que puede o no ser costoso. No lo sé.

Además, la pregunta y la respuesta no se preguntan "de la mejor manera" en que puede hacer las cosas, preguntando cómo hacer una cosa específica y esta respuesta se ajusta a esa cosa específica mencionada en la pregunta. Estoy diciendo todo esto porque las personas votan negativamente todo el tiempo por no hacer las cosas como se les enseñó o "la mejor".

Actualización: agregué un caso de uso para que pueda ver cómo estoy usando la función y el método. No siempre hago esto, pero creo que explicará las cosas.

    
respondido por el 1.21 gigawatts 27.10.2015 - 09:10
4

Tomado del código fuente de get_bloginfo() , esta es una clase muy simple que puede utilizar. y alcance a tu voluntad.

Decidí usar métodos, hacer que las propiedades públicas de una clase no sean realmente una buena codificación y no es recomendable. Sé que Wordpress prospera en propiedades públicas, pero eso es Wordpress.

Aquí está la clase ( que debe convertir para hacer uso del espacio de nombre adecuado, como dije, esta es una clase extremadamente simple y sencilla )

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

Puedes usar la clase de la siguiente manera:

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

Esto dio como resultado lo siguiente como se probó en mi instalación de prueba

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
    
respondido por el Pieter Goosen 27.10.2015 - 17:51
1

Estas respuestas son todas más lentas que simplemente usar get_bloginfo normalmente.

La mayoría de las diversas cosas que la función get_bloginfo puede usar es el sistema de almacenamiento en caché de memoria integrado de WordPress. Por lo general, no sufren que los problemas de velocidad se llamen varias veces, porque cosas como las opciones y otras cosas que provienen de la base de datos se almacenan en la caché la primera vez que se recuperan los datos.

Sin embargo, llamarlo un montón de veces para algún tipo de paso de "configuración" como este de antemano hace que haga un montón de trabajo innecesario en la consulta de todos esos datos para comenzar, especialmente si la mayor parte de eso son datos. en realidad no es necesario tener.

    
respondido por el Otto 27.12.2015 - 11:19

Lea otras preguntas en las etiquetas