Chamando shortcode no resultado das tiras wp_localize_script

4

Estou trabalhando para adicionar algumas funcionalidades em um plug-in do Wordpress que, após um determinado clique, precisa chamar alguns códigos curtos por meio do ajax.

O que tentei pela primeira vez foi chamar o shortcode dentro do processamento do ajax no meu arquivo functions.php:

add_action( 'wp_ajax_nopriv_showads', 'showads' );

function showads(){

    echo do_shortcode('[myshortcode]');

    wp_die();
}

Onde eu movo a saída do shortcode na resposta da chamada ajax. Este shortcode não foi executado.

Então, depois de alguma pesquisa na função "wp_localize_script" dentro do plug-in, eu chamaria o shortcode:

    wp_localize_script( 'script-handle', 'ajax_object', 
                      array('ajaxurl' => admin_url( 'admin-ajax.php' ),
                            'adspace' => do_shortcode( '[myshortcode]' ) 
    ));

E na resposta do ajax eu movia a saída do shortcode.

O problema que estou tendo no momento é que, assim que a função "wp_localize_script" for chamada, a saída do shortcode (deve criar um anúncio do google) é toda despojada.

Gostaria de saber se existe uma maneira de não ter a saída do shortcode desfeita ou conselhos se estou tentando resolver tudo isso de maneira incorreta.

    
por thairish 24.05.2016 / 21:01

2 respostas

0

Tente adicionar ob_start (); e ob_clean (); para a função showads, que pode ser melhor não quebrar a saída.

function showads(){
    ob_start();
    echo do_shortcode('[myshortcode]');
    $result = ob_clean();
    return $result;
    exit();
}
    
por Benoti 29.09.2016 / 09:09
0

Ao retornar da função, você tem que usar ob_start() e ob_get_clean() , sozinho, você pode obter o resultado no lugar onde você precisa.

ob_start () :

ob_start - Ativar o buffer de saída

Esta função ativará o buffer de saída. Enquanto o buffer de saída está ativo, nenhuma saída é enviada do script (diferente de cabeçalhos), em vez disso, a saída é armazenada em um buffer interno.

Os buffers de saída são empilháveis, isto é, você pode chamar ob_start () enquanto outro ob_start () está ativo. Apenas certifique-se de chamar ob_end_flush () o número apropriado de vezes. Se várias funções de retorno de chamada de saída estiverem ativas, a saída será filtrada seqüencialmente por meio de cada uma delas em ordem de aninhamento.

ob_get_clean ():

ob_get_clean - Obtém o conteúdo do buffer atual e exclui o buffer de saída atual

ob_get_clean() essencialmente executa ob_get_contents() e ob_end_clean() .

O buffer de saída deve ser iniciado por ob_start() com PHP_OUTPUT_HANDLER_CLEANABLE flag. Caso contrário, ob_get_clean() will not work .

Exemplo:

function event_form()
{
  ob_start();
  include('event_form.php');// You can include or print the short-code over here
  $output = ob_get_clean();
  return $output;
}
    
por Naresh Kumar .P 29.09.2016 / 09:15