• Boa tarde, galera!
    Sou nova aqui, então espero estar postando do jeito certo 🙂
    Estou desenvolvendo um tema, para o qual criei uma página de opções do tema conforme a Settings API. Essa página tem alguns campos de texto e uma textarea. Estava tudo funcionando OK até eu implementar uma função de validação no formulário, para evitar inserção de código malicioso. Acontece que eu queria que a textarea aceitasse algum HTML, como parágrafo, link, negrito e itálico – só que é óbvio que a validação eliminou todas, porque eu usei strip_tags().
    Tentando contornar isso, me deparei com uma sugestão de implementar o wp_editor no lugar da textarea e fui tentar. Só que agora o editor não está a) recuperando conteúdo anteriormente inserido, nem b) salvando conteúdo inserido depois, muito menos c) mostrando o conteúdo na página final.
    Segue o código:

    // em theme-options.php, funcao que mostra o editor no backend
    function apresentacao_texto_setting() {
    	$options = get_option('p_apresentacao');
    	wp_editor( $options[apresentacao_texto], 'apresentacaotexto',
    	$settings = array(
    		'wpautop' => false,
    		'media_buttons' => false,
    		'editor_height' => 150,
    		'teeny' => true
    		)
    	);
    }
    
    // em custom-homepage.php, onde o texto deveria ser mostrado
    <?php echo sanitize_text_field($options['apresentacao_texto']); ?>

    Já tentei tirar a sanitize_text_field(), já tentei usar apply_filter(), mas não consigo fazer funcionar.

    Se a melhor solução for voltar à textarea comum, “burlando” a minha própria validação para que ela aceite algum HTML, também é bem-vinda.
    Ah, a instalação do WP é local, fresquinha, não tem nenhum plugin e o único outro tema é o TwentyFifteen.
    Agradeço a ajuda desde já 🙂

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • Yara Georgia,

    o wp_editor está salvando as informações no banco de dados? Ele não implementa o salvamento por conta própria, você precisa criar essa função. Este post (em inglês) tem um exemplo completo de implementação.

    Criador do tópico Yara Georgia M.

    (@schreiyarai)

    Oi Ricardo,
    Primeiramente, obrigada pela resposta.
    Confesso que não tinha tentado olhar se ele estava salvando no banco de dados, e realmente não estava. Tentei seguir o exemplo do post que vc sugeriu, mas achei muito complexo, então encontrei este aqui, que achei mais simples. Adaptei o meu código, mas não funcionou. (Ficou assim: http://pastebin.com/rqsFq1j2)
    Depois tentei simplificar o código final do exemplo do seu link, adaptar e colocar no meu, mas continua não funcionando. (Resultado: http://pastebin.com/rHANcqXF) Não tem nada entrando no banco de dados…
    Estou quase mandando a validação às favas e voltando à textarea simples que estava funcionando :} (mas o editor visual seria uma mão na roda para o usuário final…)

    Nos seus dois exemplos está faltando o 1º parametro da função que recebe a action save_post.

    Experimente isso:

    function proserv_save_custom_fields($postid) {

    talvez já funcione.

    (isso deve estar sendo registrado no seu log de erros, dê uma olhada lá pra ver se o sistema não tá reclamando de mais coisas)

    Criador do tópico Yara Georgia M.

    (@schreiyarai)

    Na verdade eu tinha colocado o parâmetro na função O.O
    Aliás, tinha colocado dois:

    function proserv_save_custom_fields($postid,$post)

    o segundo por causa da condicional que checa a revisão.
    E não funcionou. Tirei o segundo parâmetro e a condicional, e ainda não funciona.

    (se me desculpa a ignorância, onde fica o log de erros? não estou encontrando aqui)

    o local do log varia de servidor pra servidor. Em geral fica dentro de

    /var/log/{apache/nginx}/error.log

    se o seu servidor tiver um cpanel ou algo assim é capz de conseguir ver por ele tb.

    outra opção é usar

    define('WP_DEBUG', true);

    no seu wp-config.php pra ver os erros na tela.

    Criador do tópico Yara Georgia M.

    (@schreiyarai)

    Coloquei o WP_DEBUG e recebi a seguinte mensagem de erro:

    Notice: Undefined index: apresentacao_texto in [caminho]\theme-options.php on line 491

    A linha 491 é a que está chamando o wp_editor:

    // Apresentacao - Texto
    function apresentacao_texto_setting() {
            $options = get_option('p_apresentacao');
            wp_editor( get_post_meta(
                    $options['apresentacao_texto'],
                    'apresentacaotexto',
                    true
            ),
            'apresentacaotexto', // editor id
            $settings = array(
                    'wpautop' => false,
                    'media_buttons' => false,
                    'editor_height' => 150,
                    'teeny' => true
            )
    );
    }

    Sendo que esse índice está definido aqui:

    add_settings_field('apresentacao_texto', 'Texto de Apresenta&ccedil;&atilde;o:', 'apresentacao_texto_setting', 'p_apresentacao', 'area_apresentacao');

    Sem contar que ele está dando “undefined index” pra tudo o que até ontem estava funcionando………

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • O tópico ‘wp_editor customizado não salva conteúdo’ está fechado para novas respostas.