gpt4 book ai didi

php - MySQL JOIN 或 UNION 与之前的结果集,WordPress pre_get_posts 和 post_meta

转载 作者:行者123 更新时间:2023-11-29 00:11:55 24 4
gpt4 key购买 nike

尝试在 WordPress 环境中根据当前选择的父 ID 递归选择数据库字段。

在 WordPress 方面:

我正在执行一个 pre_get_posts 过滤器以仅检索与用户元相关联的帖子。这很简单,直到我意识到这些帖子可以有 parent 并且会破坏界面。可以接受涉及修复 WP_List_Table 排序算法以允许子级按层次重新排序的答案。不包括 parent ,表格如下所示:

enter image description here

元查询看起来像这样:

// pre_get_posts
$meta_query = $query->get('meta_query');

$meta_query[] = array(
'key' => '_my_meta_key',
'value' => get_user_meta( $user_id, '_my_meta_key' ),
);

$query->set('meta_query', $meta_query );

在 MySQL 方面,将父项添加到此查询中也同样有效。就目前而言,上面的查询就像这里的 SQL fiddle 的第一个 select 子句一样工作:

SQL Fiddle

A) 以我有限的 SQL 知识,我还没有想出如何使用第一个查询的 id 列作为参数。在这里,我复制并粘贴了整个内容以用作 IN 参数,它运行查询两次。有没有办法为第一个查询设置别名以在第二个查询中使用 id 字段?

B) 如何在第二个 SELECT 语句中包含返回的 parent 的 parent (等等)?

最佳答案

在解析 wp_query 后,我最终手动将父项添加回结果中。到目前为止,我还没有遇到任何问题。这不是我想要的,因为它会产生额外的(在这种情况下不会太多)并且认为可能有更有效的方法,但它就是这样。我会把它打开一段时间,以防有人想出更好的办法。

请注意,由于用户无法编辑这些帖子,因此它们不可编辑(太棒了!)

示例代码:

// users must see parent pages on the Edit screen 
// even when they can't edit them
// to preserve hierarchy
add_action( 'the_posts', 'add_post_parents_not_in_meta_query'), 10, 2 );

function add_post_parents_not_in_meta_query( $posts, $query ) {
// only on pages with screen
if ( ! function_exists( 'get_current_screen' ) )
return $posts;

$screen = get_current_screen();

// only on edit screen
if ( $screen->base !== 'edit')
return $posts;

// only during main query
if ( ! $query->is_main_query() )
return;

// get an array of found IDs
$post_ids = wp_list_pluck( $posts, 'ID' );

foreach( $posts as $post ) {
// check to see if exists, and if we already got this post
while ( ! empty( $post->post_parent ) && ! in_array( $post->post_parent, $post_ids ) ) {
$post = get_post( $post->post_parent );

if ( ! empty( $post ) ) {
$posts[] = $post;
$post_ids[] = $post->ID;
}
}
}

return $posts;
}

结果:

enter image description here

关于php - MySQL JOIN 或 UNION 与之前的结果集,WordPress pre_get_posts 和 post_meta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24658396/

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