WP_Query在Ajax调用的php文件中不起作用(返回500内部服务器错误)

时间:2018-07-17 10:46:34

标签: php ajax wordpress

当我从select中选择下拉菜单的语音时,我试图用ajax显示自定义帖子类型(espositori)帖子。

在file1.php内部,我有以下代码:

<select id="tipologia-cliente" name="cpt" onchange="showVariables(this.value)">
  // some options
</select>

而ajax脚本是

<script>
function showVariables(str) {
  var xhttp;
  if (str.length == 0) { 
    document.getElementById("main-content").innerHTML = "";
    return;
  }
  xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("main-content").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/wp-content/themes/TemplateName/templates-page/getcpt.php?q="+str, true);
  xhttp.send();   
}
</script>

在getcpt.php文件中,代码为:

$args = array(
    'post_type' => 'espositori',
    'numberposts' => -1
);

$myquery = new WP_Query( $args );

if($myquery->have_posts()):
    while($myquery->have_posts()):
        $myquery->the_post();
        the_title();
        echo '<br>';
    endwhile;
    wp_reset_query();   
endif;

当我选择一个选项时,我在控制台上收到此错误 GET https://www.mysite.it/wp-content/themes/mysite/templates-page/getcpt.php?q=espositori 500(内部服务器错误)

如果我用简单的回显“ Hello World!”替换getcpt.php代码,则此工作...

有人可以帮助我吗? 非常感谢

3 个答案:

答案 0 :(得分:0)

使用此代码。当您需要设置发布限制时,该属性为posts_per_page。 WP_Query link

$args = array(
    'post_type' => 'espositori',
    'posts_per_page' => -1,
);
global $post;
$myquery = new WP_Query( $args );

if($myquery->have_posts()):
    while($myquery->have_posts()):
        $myquery->the_post();
        the_title();
        echo '<br>';
    endwhile;
    wp_reset_query();   
endif;

答案 1 :(得分:0)

这是使用WordPress AJAX的工作代码。

将此添加到 functions.php

add_action('wp_ajax_load_custom_espositori', 'load_custom_espositori_ajax_handler'); // wp_ajax_{action}
add_action('wp_ajax_nopriv_load_custom_espositori', 'load_custom_espositori_ajax_handler'); // wp_ajax_nopriv_{action}

function load_custom_espositori_ajax_handler() {      
   $args = array(
        'post_type' => 'espositori',
        'posts_per_page' => -1
    );

    $myquery = new WP_Query( $args );

    if($myquery->have_posts()):
        while($myquery->have_posts()):
            $myquery->the_post();
            the_title();
            echo '<br>';
        endwhile;
        wp_reset_query();   
    endif;

    wp_die();
}

将此添加到模板文件

<script>
function showVariables(str) {
    var xhttp;
    if (str.length == 0) { 
        jQuery('#main-content').html('');
        return;
    }
    jQuery.ajax({
        url : '<?php echo site_url(); ?>/wp-admin/admin-ajax.php', // AJAX handler
        data : { action : 'load_custom_espositori', qry : str },
        type : 'POST',
        success : function( $result ){
            if( $result ) {
                jQuery('#main-content').html($result);
            }
        }
    });
}
</script>

让我知道WordPress版本是否有效。

答案 2 :(得分:0)

尝试改用$ wpdb全局对象。这是您代码中的示例:

$args = array(
  'post_type' => 'espositori',
  'posts_per_page' => -1,
  'post_status' => 'publish',
);
global $wpdb;
$posts = $wpdb->get_posts($args);

if(!empty($posts)){
  foreach($posts as $post){
  setup_postdata($post); 
  //You can use the_title() the_content() the_excerpt() the_permalink() etc...
  echo get_the_title($post->ID);
  echo '<br />';
}
}

希望有帮助!