Загрузить форму CF7 через Ajax

Я бы загрузил через ajax содержимое страницы, которая находится внутри шорткода одной из моих форм, созданных с помощью подключаемого модуля CF7. Когда контент отображается, шорткод не обрабатывается и печатается как текст. Есть ли способ принудительно выполнить шорткод в вызове ajax? Спасибо, М.

Это сценарий js:

function getcontent(postid){
    // here is where the request will happen
    jQuery.ajax({
        url: '/wp-admin/admin-ajax.php',//ajax controller request
        data:{
            'action':'dch',//action invoked
            'fn':'ghcontent',//function required
            'postid':postid//if of post required
        },
        cache: false,
        async:true,
        timeout: 3000,
        success:function(data){
            jQuery("#posthome").html(data);//print the html (content)
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });
}

А это мой php-код:

add_action('wp_ajax_nopriv_dch', 'ghcontent');
add_action('wp_ajax_dch', 'ghcontent');
function ghcontent(){
  $args = array('page_id' => $_REQUEST['postid']);
  query_posts($args);
  if(have_posts()) : 
    while (have_posts()) : the_post();
      the_content();
    endwhile;
  endif;
  die();
}

person Marco Barrella    schedule 11.05.2013    source источник


Ответы (2)


do_shortcode не будет работать в вашем admin-ajax.php Вместо этого попробуйте создать собственное действие ajax. Проверьте следующий ответ на аналогичный вопрос: https://wordpress.stackexchange.com/questions/53309/why-might-a-plugins-do-shortcode-not-work-in-an-ajax-запрос

person chifliiiii    schedule 12.01.2015

Короткие коды применяются при запуске фильтра the_content:

$post = get_post( $_REQUEST['postid'] );
$return = apply_filters( 'the_content', $post->post_content );
echo $return;
die();
person diggy    schedule 11.05.2013
comment
Я уже пробовал оба с the_content с обеими функциями apply_filters, но не сработало! есть предложения? Спасибо :) - person Marco Barrella; 12.05.2013
comment
немного необычно, но вы можете попробовать что-то вроде do_shortcode( get_the_content() ) - person diggy; 12.05.2013
comment
Я обновил вопрос своим кодом, может быть, неправильный вызов ajax? Большое спасибо! - person Marco Barrella; 12.05.2013
comment
Я бы использовал get_post, чтобы получить данные поста, обновил ответ, надеюсь, это поможет! - person diggy; 12.05.2013
comment
Хорошо, может быть, проблема в том, что я вызываю контент через ajax на домашней странице? Есть решения? Благодарность! - person Marco Barrella; 14.05.2013