apply_filters ('the_content', $ content) vs do_shortcode ($ content)

21

Digamos que eu tenho uma opção de tema ou uma área de texto pós-meta personalizada. Agora quero executar vários códigos de acesso, textos gerais, imagens etc.

Quais serão as melhores práticas e por quê?

Opção 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

Opção 2:

$content = //my text area data;
echo do_shortcode($content);

Por favor, explique-me qual será a melhor prática e por quê.

EDITAR

Deixe-me descrever o cenário em detalhes. Desenvolvo temas para clientes com suas necessidades. Às vezes, preciso adicionar meta meta em tipos de postagem / páginas / post personalizado, para que eles possam adicionar códigos de acesso (controle deslizante, formulário de contato etc.) ou apenas um texto simples. É um texto arquivado.

Para fazer o código curto funcionar, eu uso a opção 1 . Agora, ouvi de alguém que esse é um caminho errado e devo usá-lo do_shortcode. Mas eles não me deram uma explicação de por que é errado. É por isso que estou perguntando.

Todo esse processo pode ser feito no editor de texto padrão do wp. Mas preciso criar essas opções para uso específico do modelo, é isso que meus clientes desejam.

Coleção Sufi
fonte

Respostas:

16

PERGUNTA E RESPOSTA REVISITAS

Às vezes, existem perguntas que o incomodam e caçam mais tarde na vida novamente, e essa é uma dessas perguntas.

Essa pergunta me fez pensar em uma solução alternativa para o problema. Como já afirmei, campos personalizados e meta boxes estão lá para armazenar pequenos pedaços de metadados, e não para atuar como uma extensão para postar conteúdo onde você pode executar códigos de acesso e funções. Além disso, como já afirmei, seu método está incorreto e não deve ser usado

O que achei interessante em sua postagem é que você usou campos personalizados e meta boxes para exibir inadvertidamente conteúdo personalizado da entrada do usuário. Então, sentei-me e pensei em uma maneira possível de fazer isso funcionar e usar os dados de campo personalizados e os dados da meta-caixa corretamente

Esta é a minha ideia:

O CENÁRIO:

NOTA: Isso pode ser modificado para atender a qualquer necessidade

Em uma única postagem, um usuário deseja / exige a exibição dinâmica de conteúdo personalizado após a postagem para atender às suas necessidades. Isso deve ser dinâmico. O conteúdo deve ser uma consulta personalizada e o usuário precisa escolher o que mostrar sempre que quiser e o que quiser

A POSSÍVEL SOLUÇÃO:

Os códigos de acesso não funcionarão aqui, pois os códigos de acesso não podem ser executados em campos personalizados. Tampouco do_shortcodefuncionará, pois não é dinâmico e está codificado permanentemente, algo que não queremos. Como em sua pergunta, vamos fazer uso de campos personalizados. Mais uma vez enfatizo, não use o campo personalizado para executar uma consulta ou códigos de acesso personalizados

O PLANO:

Usaremos o campo personalizado para salvar apenas nossos argumentos de consulta, isso é tudo. Então, o que fazemos é criar um campo personalizado chamado custom_query_arguments. Na tela do editor de postagem, agora você verá seu campo personalizado, pronto para uso

O próximo passo será adicionar nossos argumentos de consulta personalizados ao nosso campo. Digamos que precisamos mostrar 3 postagens da categoria 1 classificadas por título. Portanto, nossos argumentos de consulta devem ficar assim: ( No formato de string )

'posts_per_page=3&cat=1&orderby=title'

Agora é isso que você deve inserir no seu campo personalizado. Depois de inserido, salve o valor do seu campo personalizado

O próximo passo será construir a consulta personalizada no seu single.php. O que é necessário aqui, precisamos obter o valor do nosso campo personalizado, que é na verdade nossos argumentos de consulta, e alimentá-lo para uma nova instância de WP_Queryrecuperar as postagens. Também precisamos verificar se realmente temos um valor salvo nesse campo personalizado, se o campo personalizado estiver vazio, não mostraremos nada

O CÓDIGO:

Você pode tentar algo assim no single.php logo após o único post.

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

Se o usuário deseja remover a consulta personalizada, ele pode simplesmente excluir o valor do campo personalizado e deixar o campo personalizado em branco. Se ele precisar mostrar a mesma consulta, mas da categoria 10 e um total de 5 postagens, ele poderá substituir o valor original pelo seguinte

'posts_per_page=5&cat=10&orderby=title'

Algumas notas:

É importante usar a sintaxe e o formato corretos ao inserir informações nesses campos e meta boxes personalizados. Erros de sintaxe ou informações incorretas levarão a resultados indesejados ou até a erros fatais. É importante informar seus clientes sobre essas informações

RESPOSTA ORIGINAL

Não entendo o que você está tentando realizar, mas pelo que posso lhe dizer, essas são duas coisas separadas

OPÇÃO 1

apply_filters('the_content', $content);é usado para aplicar os filtros de conteúdo ao conteúdo de postagem não filtrado bruto, que geralmente vem do uso de $post->post_content. Esses filtros incluem o famoso filtro wp_autopque adiciona tags p aothe_content()

apply_filters('the_content', $content); é geralmente usado em conjunto com o local get_postsonde se trabalha diretamente com os WP_Postobjetos sem usar, o setup_postdata( $post )que torna as tags do modelo the_content() disponíveis para uso

OPÇÃO 2

do_shortcode é usado para adicionar um código de acesso em qualquer lugar nos arquivos de modelo fora do editor de texto no backend da tela do editor de páginas, basicamente filtrando códigos de acesso através de seus ganchos.

O uso correto é o seguinte

Exemplo: Adicionando o Shortcode da Galeria em um Arquivo de Modelo

echo do_shortcode( '[gallery]' )

EDIT 1

Pelos seus comentários, eu não usaria um código abreviado.

Se você não deseja adicionar um código curto através do editor de texto e adicioná-lo diretamente (código rígido) do_shortcodeem um arquivo de modelo, prefiro adicionar a função ao modelo

Exemplo:

Se você tiver a seguinte função de código curto

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

Você pode simplesmente chamar a função diretamente em um modelo como

echo footag_func();

É muito mais rápido, pois o código curto não precisa ser analisado

EDIT 2

Para ser honesto aqui, você está fazendo isso errado completamente em sua edição. Por isso não entendi sua pergunta inicial

Às vezes, preciso adicionar meta meta em tipos de postagem / páginas / post personalizado, para que eles possam adicionar códigos de acesso (controle deslizante, formulário de contato etc.) ou apenas um texto simples. É um texto arquivado.

Para fazer o shortcode funcionar, eu uso a opção 1 .....

Os campos personalizados não são campos de texto e certamente não devem ser usados ​​para executar códigos de acesso e, nesse caso, controles deslizantes ou formulários de contato. Os campos personalizados nunca devem ser usados ​​para substituir o editor de texto em postagens e páginas.

Como afirmei anteriormente, apply_filters('the_content', $content);deve ser usado para aplicar a formatação ao conteúdo de postagem bruto.

Você tem duas opções aqui

  • Use do_shortcodediretamente em arquivos de modelo, o que eu não recomendaria, pois o uso da função é mais rápido, pois o código curto não precisa ser analisado

  • Use o código de acesso diretamente no editor de texto para a página / publicação específica

Eu seriamente recomendo que você dê uma nova olhada em suas estruturas e no que deseja alcançar. Os campos personalizados não são editores de texto e não podem executar códigos de acesso ou controles deslizantes.

Minha recomendação seria procurar talvez widgets personalizados ou um sistema que você possa usar com campos personalizados

Pieter Goosen
fonte
11
Pieter obrigado pela explicação. Eu já sei disso. Mas eu estava perguntando, qual opção será mais precisa se o objetivo for apenas gerar códigos de acesso a partir da área de texto de opções de meta / tema. Estou usando a opção 1 para obter o conteúdo filtrado, e isso se tornou um hábito para mim. E usando a opção 1, mesmo para imprimir um código curto a partir de um arquivo de texto. Então estava perguntando.
Sufi 3/15
Eu vi a edição. Compreendi seu argumento. Mas meu cenário é diferente. É como, há um texto arquivado / área e vários códigos de acesso. Agora o usuário pode colocar qualquer um dos códigos de acesso nessa área. Portanto, não posso usar diretamente uma função. Eu preciso manter essa parte dinâmica.
Sufi
Onde é que o campo de texto, é o mesmo que na tela do editor página de back-end
Pieter Goosen
Pode ser uma meta meta. Ou pode ser uma opção de tema. Eu uso o filtro de conteúdo para ambos.
Sufi 3/15
Desculpe, mas nada disso faz sentido. Por que você deseja usar códigos de acesso em campos personalizados. Por que você usaria códigos de acesso então?
precisa saber é o seguinte