Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WordPress:如何返回带有查询的meta\u帖子?_Php_Ajax_Wordpress - Fatal编程技术网

Php WordPress:如何返回带有查询的meta\u帖子?

Php WordPress:如何返回带有查询的meta\u帖子?,php,ajax,wordpress,Php,Ajax,Wordpress,我正在使用admin-AJAX.php执行一个AJAX请求,根据选中的复选框过滤帖子。它工作得很好,尽管我正在努力找到一种方法来返回每篇文章的元细节 我只是使用query_posts获取我的数据,如下所示: function ajax_get_latest_posts($tax){ $args= array( 'post_type'=>'course', 'tax_query' => array( array(

我正在使用admin-AJAX.php执行一个AJAX请求,根据选中的复选框过滤帖子。它工作得很好,尽管我正在努力找到一种方法来返回每篇文章的元细节

我只是使用query_posts获取我的数据,如下所示:

    function ajax_get_latest_posts($tax){

    $args= array(
        'post_type'=>'course',

    'tax_query' => array(
         array(
        'taxonomy' => 'subject',
        'field' => 'slug',
        'terms' => $tax
    )
    )

);

$posts=query_posts( $args);


return $posts;
}
我如何修改它以同时返回元数据?我知道我可以使用meta_query按元数据筛选帖子,但我只想在帖子中显示数据。

编辑:

除了下面概述的解决方案外,如果您使用的是WordPress>=3.5(您应该是:),那么您可以简单地使用WP_Post对象的神奇方法

基本上,WP_Post对象(几乎所有来自WP_查询的查询结果的posts数组都由它组成)使用PHP的
\uu get()
\uu isset()
魔术方法。这些方法允许您使用对象本身中未定义的对象属性

这里有一个例子

foreach ( $posts as $key => $post ) {
    // This:
    echo $post->key1;
    // is the same as this:
    echo get_post_meta( $post->ID, 'key1', true );
}
如果进行
打印($post)
变量转储($post)
,将不会看到
$post
对象的“key1”属性。但该函数允许您访问该属性

===========================================================

在我看来,您有两个常规选项—循环浏览帖子并获取所需的数据,如下所示(此代码将在
$posts=query_posts($args);
)之后出现:

或者挂接到the_postsfilter hook,并在那里做同样的事情(更多的工作,但是如果您有多个函数需要将数据添加到每个post,那么可能会更容易)。此代码将转到functions.php或插件文件(如果您正在制作插件):

然后你会改变你的想法

$posts=query_posts( $args);
这一行:

add_filter( 'the_posts', 'my_the_posts_filter', 10 );

$posts = query_posts( $args );

remove_filter( 'the_posts', 'my_the_posts_filter', 10 );

考虑到这将在AJAX请求内部发生,您可以从技术上取消
remove\u filter()
调用,但最好在代码中进行任何其他post查询时使用它

去那里寻找
meta_query
完美答案,我最后使用了第一个解决方案,但第二个也很好,因为我不知道这个方法。谢谢,你救了我一个小时我更新了我的答案-我完全忘记了WP_Post对象的神奇方法-它们更容易使用:)。基本上,您可以将元键作为对象的属性来访问。请随意查看此处的代码-并查看您可以访问的其他类似内容(例如
$post->page_template
;)太好了,谢谢!还没有使用WP_Post,它看起来确实有点简单。谢谢你的修改,祝你好运
$posts=query_posts( $args);
add_filter( 'the_posts', 'my_the_posts_filter', 10 );

$posts = query_posts( $args );

remove_filter( 'the_posts', 'my_the_posts_filter', 10 );