通过$.ajax调用的“循环处理”php文件中的setuppostdata

时间:2014-04-30 作者:Matthias Max

我调用了一个“循环处理程序”类型的php文件,它通过WP\\U查询打开一个循环。

内部foreach 循环我想使用show_postdata 作用我知道这个函数的全局$post方面。我试着把global $post 但是,php文件中的任何地方都没有成功。

我得到一个错误500服务器错误,在catch部分没有详细的错误消息。

当我使用该类在模板中获取服务器上的数据时,它会起作用。

这是我的AJAX调用:

    $.ajax({
    type       : "GET",
    data       : {numPosts : numPosts, postTypes : postTypes, template : template, postID : null, filterArgs : filterArgs, fields: fields, inclMeta : inclMeta, imgFields : imgFields },
    dataType   : "html",
    url        : bfApp.setWPUrl + "/bfLoopHandler.php",
    beforeSend : function(){
    },
    success    : function(data){

        if (typeof(callbackSuccess) == "function") {
            callbackSuccess(data);
        }

    },
    error     : function(jqXHR, textStatus, errorThrown) {

        if (typeof(callbackError) == "function") {
            callbackError(jqXHR, textStatus, errorThrown);
        }

    }
});
这是php文件的摘录,直到调用show\\u postdata为止:

class bfLoop {
public function getData($postIDs, $postTypes, $numPosts, $filterArgs, $template, $fields, $inclMeta, $imgFields, $inclCats) {

    global $post;

    define(\'WP_USE_THEMES\', false);
    $parse_uri = explode( \'wp-content\', $_SERVER[\'SCRIPT_FILENAME\'] );
    require_once( str_replace(\'index.php\', \'\', $parse_uri[0]) . \'wp-load.php\' );

    // Argumente setzen
    if ($postIDs == null || $postIDs == 0) {
        $args = array( \'post_type\' => $postTypes, 
                       \'post_status\' => array(\'publish\'),
                       \'posts_per_page\' => $numPosts, 
                       \'meta_query\' => $filterArgs,
                       \'fields\' => $idsOnly );
    } else {
        if (is_array($postIDs)) {
            $args = array(
            \'post__in\' => $postIDs,
            \'post_type\' => \'any\');                  
        } else {
            $args = array(
            \'p\' => $postIDs,
            \'post_type\' => \'any\');                
        }
    }

    $loop = new WP_Query( $args );  

        $retArray = array();

        $posts = $loop->get_posts();   
        foreach ( $posts as $post ) {

            try {
               setup_postdata( $post ); 
            } catch(Exception $e) {
                //return "AFTER";
                return "W:" . $e->getMessage();
            } ......

1 个回复
最合适的回答,由SO网友:Matthias Max 整理而成

通过获取作者、post\\u date、permalink和;无setup\\u postdata手动摘录:

        $excerpt = myCustomExcerptFunction($post, 35);
        $post->post_excerpt = $excerpt;

        // Permalinks
        $post->post_permalink = get_post_permalink($post->ID);

        // Author
        $authorObjekt = get_userdata($post->post_author);
        $post->post_author_displayname = $authorObjekt->data->display_name;
        $post->post_author_nicename = $authorObjekt->data->user_nicename;

        // Date
        $post->post_date_wpformat = date_i18n( get_option( \'date_format\' ), 

结束

相关推荐

AJAX返回正确的数据,但位于错误的位置

我正在尝试如何在Wordpress中正确使用AJAX:(我在其他网站上使用过,但在WP中没有使用过)我在函数中有这个代码。主题的php:function jquery_stuff() { wp_enqueue_script(\'jquery\'); wp_enqueue_script(\'scriptname\', get_bloginfo(\'template_url\') . \'/wibergsweb.js\'); } add_action( \'in