Adicionando uma classe à função body_class

4

Basicamente eu apliquei este caminho para mostrar certas cores em páginas como search.php ou uma lista em casa. O que ele faz é ler uma variável que recebe um campo de WP, se esse campo é igual a um certo número, então ele adiciona um nome de classe que em CSS tem uma cor Agora o campo em uma única página está lá, embora sempre que eu adiciono o 'if system' que eu apliquei nas outras páginas ele não adiciona a classe no corpo em header.php. Agora isso funciona corretamente em outras páginas (não globalmente, mas individualmente), mas não aqui por algum motivo.

No cabeçalho.php:

<?php
    //Body class
    if($mem_id == 1)          { $class =  'color1';    }
    if($mem_id == 2)          { $class =  'color2';    }         
    if($mem_id == 3)          { $class =  'color3';    }
    if($mem_id == 4)          { $class =  'color4';    }
    if($mem_id == 5)          { $class =  'color5';    }
    if($mem_id == 6)          { $class =  'color6';    }
    if($mem_id == 7)          { $class =  'color7';    }
    if($mem_id == 8)          { $class =  'color8';    }
    if($mem_id == 9)          { $class =  'color9';    }
?>
<body <?php body_class($class); ?>>

Em outras páginas: $mem_id = get_field('memtype_id');

    
por David H 07.05.2014 / 12:48

2 respostas

4

Na verdade, você só precisa de um retorno de chamada para o filtro body_class . Em seguida, basta verificar qual correlação você obteve entre seus metadados e o valor real: Se for uma correlação de 1: 1, basta adicionar o resultado de get_field() como nova classe de corpo. Exemplo: array( get_field( 'mem_id' ) ) se o valor meta mem_id for color3 para, e. Se não, então você pode adicioná-lo como um argumento sprintf() e construir sua classe como no exemplo abaixo. Lembre-se de verificar se você realmente obteve um valor e, caso contrário, defina um padrão.

add_filter( 'body_class', function ( $wp, $extra )
{
    return array_merge( $wp, (array) $extra, array(
        sprintf(
            'color%s',
            "" !== get_field( 'membertype_id' )
                ? get_field( 'membertype_id' )
                : "1" // default
        ),
        # additional declarations here
    ) );
}, 20, 2 );

Este é apenas um exemplo e você certamente pode ser muito mais sofisticado na elaboração de uma solução. Apenas tente não vinculá-lo com muita força ao valor real ou ao nome do campo, pois essas dependências podem se tornar rapidamente um pesadelo de manutenção.

Lembre-se também de que a única razão pela qual usei get_field() do plug-in "AdvancedCustomFields" foi a tag originalmente adicionada à pergunta. Em real WordPress, isso seria get_post_meta() ou get_post_custom() ou similar (dependendo do que você está recuperando exatamente).

    
por kaiser 07.05.2014 / 13:47
0

Como você está especificando a classe com base em um valor definido em outro lugar, parece que você pode definir essa variável em outro arquivo diferente de header.php . Você pode ter um problema de escopo. Eu recomendaria em seu arquivo functions.php criar um escopo global de sua variável: global $mem_id; e, em seguida, garantir que você internalize o escopo global em cada arquivo que você modificar ou usar o valor.

Também, à primeira vista, parece que você está tentando realizar o que pode existir em um plugin já enlace (don não se preocupe, ele não foi atualizado há algum tempo, mas a lógica funciona bem para as versões atuais do WordPress). Só queria dar uma olhada.

    
por codearachnid 07.05.2014 / 13:44

Tags