对$wpdb->GET_RESULTS检索到的POST结果数组使用Have_Posts()

时间:2012-04-29 作者:Matt Scheurich

我不知道我是弱智、疯狂还是纯粹的天才,但我决定使用标签作为链接整个网站内容的一种方式(一个大型多对多关系网站,用于归档大型项目的各个方面)。不幸的是,这意味着一些插件使用的一些自定义帖子类型不能与其他对象(帖子、页面等)正确链接,因为它们使用其他分类法(在媒体“附件”的情况下,它们根本不使用分类法,除非我加入一个插件来解决这个问题——我正在使用它,它使用不同的分类法……)。事实上,一些插件类型有特定的硬编码分类法,所以我不能真正地检查和更改它们的核心代码,否则插件升级会抹去我所有的辛苦工作。

为了解决这种碎片化和对插件和/或Wordpress漫长而艰巨的黑客工作的看法,我最初使用了高级分类学的东西WP_Query 这很有效,直到我发现我需要一些元标记的额外信息,甚至需要根据post_typemeta_values 特定于post_type. 因此,现在我将采用较短的“漫长而艰巨”的工作路线,并编写了自己的自定义SQL builder,以基于标记/元关系获取对象,并按照post_type 根据项目要求。

有一件事我很想做,这样我就可以使用这个新的自定义查询和现有的WP_Query 方法,找到将自定义查询结果包装在WP_Query 类以便我可以使用have_poststhe_post -- 基本上都很好$post 东西$wpdb->get_results 只给了我一系列简单的结果,我还不太清楚WP_Query$wpdb\'零碎的碎片;可以WP_Query 让我做一些时髦的自定义选择、联接,然后根据所选列排序?我可以直接将SQL查询get_posts() 获取WP_Query 包装器及其出色的循环功能?

现在已经很晚了,我离解开这个谜已经很近了,所以我很感激你的帮助,欧比-万·克诺比;目前,最简单的解决方案似乎是have_posts() 应用于通过$wpdb->get_results 函数,以便在该post结果集上轻松无缝地启动WP循环。如果您知道任何其他方法(自定义查询,可能吗?)我洗耳恭听。

2 个回复
SO网友:Milo

setup_postdata 将允许您通过以下方式对post结果使用循环函数get_posts.

另一种选择是使用各种可用的过滤器来改变WP_Query\'s行为-posts_join, posts_where, posts_orderby.

SO网友:Matt Scheurich

哦,我想我可能已经弄明白了;我现在才偶然发现,所以现在还为时尚早。我正在尝试做一些厚颜无耻的事情,所以目前它非常小,但应该作为一个可能的基础:

function get_posts_custom_query( $query_args ) {
    global $wpdb;

    // Do the necessary funky stuff here to build $sql_query from the given $query_args
    $custom_query = $wpdb->get_results($sql_query);

    // If you\'ve limited the results returned and using SQL_CALC_FOUND_ROWS in the select query...
    if ( $query_args[\'posts_per_page\'] > 1 ) {
        $found_posts = $wpdb->get_var(\'SELECT FOUND_ROWS()\');
        $max_num_pages = ceil($found_posts/$query_args[\'posts_per_page\']);
    }

    // Sanitise each post result
    foreach( $custom_query as $i => $post ) {
        $custom_query[$i] = sanitize_post($post, \'raw\');
    }

    // Setup WP_Query object
    $new_wp_query = new WP_Query();
    $new_wp_query->query = $sql_query;
    $new_wp_query->posts = $custom_query;
    $new_wp_query->post_count = count($custom_query);
    if ( isset($found_posts) ) $new_wp_query->found_posts = $found_posts;
    if ( isset($max_num_pages) ) $new_wp_query->max_num_pages = $max_num_pages;

    // Set the first post
    if ( $new_wp_query->post_count > 0 )
        $new_wp_query->post = $custom_query[0];

    return $new_wp_query;
}

结束

相关推荐

$wpdb->num_rows doesn't work

我试图在自定义字段保存到db之前对其执行一些检查。所以我决定在浏览器和db之间使用add\\u过滤器。这是我的密码function fields_pre_check($post_id){ $errors = false; $values = get_post_custom(get_the_ID()); $act_val = $_POST[\'checks_news\']; 。。。altri检查。。。if(get_check_key($post_id, $act_

对$wpdb->GET_RESULTS检索到的POST结果数组使用Have_Posts() - 小码农CODE - 行之有效找到问题解决它

对$wpdb->GET_RESULTS检索到的POST结果数组使用Have_Posts()

时间:2012-04-29 作者:Matt Scheurich

我不知道我是弱智、疯狂还是纯粹的天才,但我决定使用标签作为链接整个网站内容的一种方式(一个大型多对多关系网站,用于归档大型项目的各个方面)。不幸的是,这意味着一些插件使用的一些自定义帖子类型不能与其他对象(帖子、页面等)正确链接,因为它们使用其他分类法(在媒体“附件”的情况下,它们根本不使用分类法,除非我加入一个插件来解决这个问题——我正在使用它,它使用不同的分类法……)。事实上,一些插件类型有特定的硬编码分类法,所以我不能真正地检查和更改它们的核心代码,否则插件升级会抹去我所有的辛苦工作。

为了解决这种碎片化和对插件和/或Wordpress漫长而艰巨的黑客工作的看法,我最初使用了高级分类学的东西WP_Query 这很有效,直到我发现我需要一些元标记的额外信息,甚至需要根据post_typemeta_values 特定于post_type. 因此,现在我将采用较短的“漫长而艰巨”的工作路线,并编写了自己的自定义SQL builder,以基于标记/元关系获取对象,并按照post_type 根据项目要求。

有一件事我很想做,这样我就可以使用这个新的自定义查询和现有的WP_Query 方法,找到将自定义查询结果包装在WP_Query 类以便我可以使用have_poststhe_post -- 基本上都很好$post 东西$wpdb->get_results 只给了我一系列简单的结果,我还不太清楚WP_Query$wpdb\'零碎的碎片;可以WP_Query 让我做一些时髦的自定义选择、联接,然后根据所选列排序?我可以直接将SQL查询get_posts() 获取WP_Query 包装器及其出色的循环功能?

现在已经很晚了,我离解开这个谜已经很近了,所以我很感激你的帮助,欧比-万·克诺比;目前,最简单的解决方案似乎是have_posts() 应用于通过$wpdb->get_results 函数,以便在该post结果集上轻松无缝地启动WP循环。如果您知道任何其他方法(自定义查询,可能吗?)我洗耳恭听。

2 个回复
SO网友:Milo

setup_postdata 将允许您通过以下方式对post结果使用循环函数get_posts.

另一种选择是使用各种可用的过滤器来改变WP_Query\'s行为-posts_join, posts_where, posts_orderby.

SO网友:Matt Scheurich

哦,我想我可能已经弄明白了;我现在才偶然发现,所以现在还为时尚早。我正在尝试做一些厚颜无耻的事情,所以目前它非常小,但应该作为一个可能的基础:

function get_posts_custom_query( $query_args ) {
    global $wpdb;

    // Do the necessary funky stuff here to build $sql_query from the given $query_args
    $custom_query = $wpdb->get_results($sql_query);

    // If you\'ve limited the results returned and using SQL_CALC_FOUND_ROWS in the select query...
    if ( $query_args[\'posts_per_page\'] > 1 ) {
        $found_posts = $wpdb->get_var(\'SELECT FOUND_ROWS()\');
        $max_num_pages = ceil($found_posts/$query_args[\'posts_per_page\']);
    }

    // Sanitise each post result
    foreach( $custom_query as $i => $post ) {
        $custom_query[$i] = sanitize_post($post, \'raw\');
    }

    // Setup WP_Query object
    $new_wp_query = new WP_Query();
    $new_wp_query->query = $sql_query;
    $new_wp_query->posts = $custom_query;
    $new_wp_query->post_count = count($custom_query);
    if ( isset($found_posts) ) $new_wp_query->found_posts = $found_posts;
    if ( isset($max_num_pages) ) $new_wp_query->max_num_pages = $max_num_pages;

    // Set the first post
    if ( $new_wp_query->post_count > 0 )
        $new_wp_query->post = $custom_query[0];

    return $new_wp_query;
}

相关推荐

$wpdb->GET_RESULTS()不使用Unicode‘where’子句获取结果

我只需要一个简单的查询,就可以找到一个学生用孟加拉语写的名字记录。 $student_rcrd = $wpdb->get_results(\"SELECT * FROM student WHERE name=\'আবুল কালাম আজাদ\'\"); 虽然我的数据库中有\'আবুল কালাম আজাদ\', 查询返回零行!但与此查询不同,它工作得非常好- $student_rcrd = $wpdb->get_results(\"SELECT * FROM stud