Wiki do André

Partilha de conhecimento

Snippets úteis para Wordpress

Nesta página estão alguns snippets úteis de programação relacionados com o Wordpress. Eles servem essencialmente para referência.

Contar todos os comentários de spam

VIEW  `spam_comments` AS SELECT comment_author_IP, COUNT( comment_author_IP ) AS total
FROM wp_comments
WHERE comment_approved =  "spam"
GROUP BY comment_author_IP
ORDER BY total DESC

Personalizar títulos de todas as páginas

Colocar este código no functions.php

/**
 * Escreve o título de acordo com a página
 * @author André Silva (http://andresilva.me)
 */
function page_title()
{
    global $post;
    global $s;
    $dash = TRUE;

    if( is_single() || is_page() ){
        echo get_the_title();

    } elseif( is_404() ){
        echo 'A página solicitada não existe (404 Not Found)';

    } elseif( is_search() ){
        echo 'Pesquisa por \''.esc_html($s).'\'';
        if( have_posts() )
        {
            $p = (get_query_var('paged')) ? get_query_var('paged') : 1;
            echo ' (página '.$p.')';
        }

    } elseif( is_category() || is_tag() || is_month() || is_year() || is_day() || is_author() ){
        wp_title('');
        $p = (get_query_var('paged')) ? get_query_var('paged') : 1;
        echo ' (página '.$p.')';

    } elseif( is_home() && get_query_var('paged') != 0 ){
        echo 'Todos os artigos (página ' . get_query_var('paged') . ')';

    } elseif( is_home() ){
        $dash = FALSE;
    }

    // separador, se necessário
    if( $dash )
        echo ' - ';

    bloginfo('name');
}

// Override da função wp_title
add_filter('wp_title', 'page_title');

Breadcrumb em páginas

Colocar este código no functions.php. Colocar a função onde se pretende apresentar a breadcrumb. Teve efeitos positivos para o Google classificar a hierarquia das páginas.

/**
 * Cria breadcrumbs consoante a página a ser visualizada
 * @author André Silva (http://andresilva.me)
 * @param $textBefore Texto antes da breadcrumb
 * @param $textAfter Texto depois da breadcrumb
 * @param $separator Separador entre níveis
 * @return String com breadcrumb
 */
function generate_breadcrumb($textBefore = '', $textAfter = '', $separator = '>')
{
    global $post;
    $separator = " $separator ";

    // localização inicial
    if( is_home($post) )
        return $textBefore.get_bloginfo('name').$textAfter;

    $bc = $textBefore.'<a href="'.get_option('home').'/">'.get_bloginfo('name').'</a>';

    if( is_single($post) ){
        $bc .= $separator;

        $cat = get_the_category();
        $bc .= (count($cat) != 1) ? 'Artigos' : '<a href="'.get_category_link($cat[0]->term_id).'">'.$cat[0]->name.'</a>';

        $bc .= $separator;
        $bc .= $post->post_title;

    } elseif( is_search() ){
        global $s;
        $bc .= $separator;
        $bc .= 'Pesquisa por \''.esc_html($s).'\'';

    } elseif( is_page() ){
        $bc .= $separator;
        $bc .= $post->post_title;

    } elseif( is_category() ){
        $bc .= $separator;
        $bc .= single_cat_title('', false);

    } elseif( is_tag() ){
        $bc .= $separator;
        $bc .= single_tag_title('', false);

    } elseif( is_month() || is_year() || is_day() || is_author() ){
        $bc .= $separator;
        $bc .= 'Arquivo';
    }

    return $bc.$textAfter;
}