我被困在一些我确信一定非常简单但让我抓狂的事情上。我在工作中被迫使用 WordPress,我对它的经验为零,到目前为止我正在努力了解它如何在挂钩和过滤器方面运作。
我想要的非常简单:
我正在使用 最新帖子 块来显示用户撰写的帖子。除了我正在处理的页面将是网站管理员的前端,他必须看到处于“待处理”状态的帖子,而不是“发布”状态的帖子。我在编辑器中找不到任何选项来更改它,因此我尝试设置一个挂钩来将查询从 'post_status' => 'publish' 更改为 'post_status' => 'pending',但它不起作用,我得到一个‘哎呀!找不到该页面。'
这是我在functions.php中写的内容:
函数名称($query){ if( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') && $query->is_main_query() ) { $query->set( 'post_status', '待处理' ); 返回$查询; } } add_filter( 'pre_get_posts', 'name_of_the_function' );
如果我完全像那样保留此功能,但写“发布”而不是“待处理”,则页面会正确显示最后发布的帖子,但使用“待处理”时,我会收到之前提到的消息。我尝试使用 add_action 而不是 add_filter 并得到相同的结果。
我想补充一点,我确实有等待处理的帖子,如果我在页面模板中写入以下内容,就会找到它们:
$args = 数组 ( '猫' => 5, 'post_status' => '待处理' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) { $query->the_post(); 回声 get_the_title(); }
只是为了检查,直接在 wp-includes/latest-posts.php 文件中,我更改了:
$args = 数组( 'posts_per_page' => $attributes['postsToShow'], 'post_status' => '发布', '订单' => $attributes['订单'], 'orderby' => $attributes['orderBy'], 'suppress_filters' => false, );
致:
$args = 数组( 'posts_per_page' => $attributes['postsToShow'], 'post_status' => '待处理', '订单' => $attributes['订单'], 'orderby' => $attributes['orderBy'], 'suppress_filters' => false, );
它可以工作并显示待处理的帖子,但我当然不能使用它,因为文件会在每次 WordPress 更新时被删除。
抱歉发了这么长的帖子,但我现在迷路了,不知道还能做什么,我已经查看了所有其他内网,但找不到答案,我真的很感激任何有关此事的帮助,谢谢提前。
通过将
pre_get_posts
与 $query->is_main_query()
一起使用,您可以将其应用于 WordPress 用于查找页面的查询(主查询)。您的代码需要更改为:
function name_of_the_function( $query ) {
if ( is_admin() || $query->is_main_query() ) {
return $query;
}
if( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') ) {
$query->set( 'post_status', 'pending' );
}
return $query;
}
add_filter( 'pre_get_posts', 'name_of_the_function' );
所以基本上,不要在管理中的任何查询或任何主查询上运行它,而只在具有特定功能的人员的特定页面上运行它。
任何人都可以帮忙为什么我的代码不显示结果
function custom_search_query($query) {
if (!is_admin() && $query->is_main_query() && $query->is_search()) {
$search_query = get_search_query(); // Retrieve the search query
$api_url = 'https://api.adenwalla.in/api/search/data';
$args = array(
'body' => json_encode(array('query' => $search_query)),
'headers' => array('Content-Type' => 'application/json'),
'timeout' => 60
);
$response = wp_remote_post($api_url, $args);
$body = wp_remote_retrieve_body($response);
$results = json_decode($body, true);
if (isset($results['ids']) && is_array($results['ids'])) {
$query->set('post__in', $results['ids']);
$query->set('orderby', 'post__in');
$query->set('posts_per_page', -1);
}
}
}
add_action('pre_get_posts', 'custom_search_query');