Os ganchos / filtros do WordPress são inseridos antes do conteúdo ou após o título

29

tentando inserir conteúdo antes do conteúdo do post em minhas funções.php - Eu sei como usar os ganchos wp regulares, mas não sei como inserir em outras áreas.

Tentei isso, mas mata conteúdo em qualquer outro tipo de postagem:

function property_slideshow( $content ) {
 if ( is_single() && 'property' == get_post_type() ) {
    $custom_content = '[portfolio_slideshow]';
    $custom_content .= $content;
    return $custom_content;
    } 
}
add_filter( 'the_content', 'property_slideshow' );

Como faço para tornar isso condicional?

Jason
fonte

Respostas:

39

Basta usar o the_contentfiltro, por exemplo:

<?php
function theme_slug_filter_the_content( $content ) {
    $custom_content = 'YOUR CONTENT GOES HERE';
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'theme_slug_filter_the_content' );
?>

Basicamente, você anexa o conteúdo da postagem após o conteúdo personalizado e retorna o resultado.

Editar

Como Franky @bueltge aponta em seu comentário, o processo é o mesmo para o título do post; basta adicionar um filtro ao the_titlegancho:

<?php
function theme_slug_filter_the_title( $title ) {
    $custom_title = 'YOUR CONTENT GOES HERE';
    $title .= $custom_title;
    return $title;
}
add_filter( 'the_title', 'theme_slug_filter_the_title' );
?>

Observe que, nesse caso, você anexa seu conteúdo personalizado após o título. (Não importa qual; apenas fui com o que você especificou na sua pergunta.)

Editar 2

A razão pela qual seu código de exemplo não está funcionando é porque você só retorna $contentquando sua condicional é atendida . Você precisa retornar $content, sem modificações, como elsecondicional. por exemplo:

function property_slideshow( $content ) {
    if ( is_single() && 'property' == get_post_type() ) {
        $custom_content = '[portfolio_slideshow]';
        $custom_content .= $content;
        return $custom_content;
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'property_slideshow' );

Dessa forma, para postagens que não sejam do tipo 'propriedade', $contentserá retornado sem modificação.

Chip Bennett
fonte
também é possível adicionar conteúdo após o título; o filtro the_title é o gancho certo.
precisa saber é
Pergunta @ChipBennett - como fazer isso com a lógica apenas para um tipo de pós personalizado - Tentei envolvê-la em if ( is_single() && 'property' == get_post_type() ) {}, mas que não funcionou para mim
Jason
@ChipBennett - eu trabalhei no meu tipo de postagem personalizado, mas o conteúdo desaparece de qualquer outro tipo de postagem. Veja a edição acima.
Jason
1
Isso ocorre porque você não está retornando $contentpara outros tipos de postagem, exceto para o seu tipo de postagem personalizado. Veja a resposta atualizada.
Chip Bennett
Apenas uma observação - você não precisa do bloco else {} - apenas o retorno de fallback. Se a condição for atendida, o retorno no if () o removerá da função, se você passar o if (), o retorno de fallback será atingido.
phatskat
0
function property_slideshow( $content ) {
    if ( is_singular( 'property' ) ) {
        $custom_content = do_shortcode( '[portfolio_slideshow]' );
        $custom_content .= $content;
        }
        return $custom_content;
}
add_filter( 'the_content', 'property_slideshow' );

A is_singulartag condicional verifica se uma postagem singular está sendo exibida e permite que você especifique o parâmetro $ post_types que, neste caso, é propriedade.

Além disso, você pode querer olhar para do_shortcode

Brad Dalton
fonte
Tarde para o jogo aqui, mas você está retornando uma variável vazia na instância que is_singular ('property') retorna false. Se você inverter sua lógica, e simplesmente retornar $ content nesse caso, você terminará com um código mais limpo e legível.
Travis Weston
Também pode adicionar outra coisa ou usar um operador ternário. É um exemplo rápido, não totalmente testado, que pode ser estendido.
Brad Dalton