gpt4 book ai didi

php - WordPress:如何使用 query_posts 返回元数据?

转载 作者:可可西里 更新时间:2023-11-01 00:05:39 24 4
gpt4 key购买 nike

我正在使用 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_Query 的查询结果的 posts 数组都包含)使用 PHP 的 __get()__isset() 魔术方法。这些方法允许您使用对象本身 undefined object 属性。

这是一个例子。

foreach ( $posts as $key => $post ) {
// This:
echo $post->key1;
// is the same as this:
echo get_post_meta( $post->ID, 'key1', true );
}

如果你制作一个print_r( $post )var_dump( $post ),你将看不到$post< 的“key1”属性 对象。但是函数__get()允许您访问该属性。

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

在我看来,您有两个通用选项 - 遍历帖子并获取您需要的数据,就像这样(此代码将紧跟在 $posts = query_posts( $args ); 之后) :

foreach ( $posts as $key => $post ) {
$posts[ $key ]->key1 = get_post_meta( $post->ID, 'key1', true );
$posts[ $key ]->key2 = get_post_meta( $post->ID, 'key2', true );
}

或者 Hook 到 the_posts 过滤器 Hook 并在那里做同样的事情(更多工作,但如果您有多个函数需要将数据添加到每个帖子 - 这可能更容易)。此代码将转到您的 functions.php 或您的插件文件(如果您正在制作插件):

function my_the_posts_filter( $posts ) {
foreach ( $posts as $key => $post ) {
$posts[ $key ]->key1 = get_post_meta( $post->ID, 'key1', true );
$posts[ $key ]->key2 = get_post_meta( $post->ID, 'key2', true );
}

return $posts;
}

然后你会改变你的

$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_filter() 调用,但最好还是保留它以防万一您的代码中的任何其他帖子查询。

关于php - WordPress:如何使用 query_posts 返回元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19640850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com