Wordpress 挂钩显示最新待处理帖子而不是已发布的帖子

问题描述 投票:0回答:2

我被困在一些我确信一定非常简单但让我抓狂的事情上。我在工作中被迫使用 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 更新时被删除。
抱歉发了这么长的帖子,但我现在迷路了,不知道还能做什么,我已经查看了所有其他内网,但找不到答案,我真的很感激任何有关此事的帮助,谢谢提前。

php wordpress wordpress-theming
2个回答
0
投票

通过将

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' );

所以基本上,不要在管理中的任何查询或任何主查询上运行它,而只在具有特定功能的人员的特定页面上运行它。


0
投票

任何人都可以帮忙为什么我的代码不显示结果

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');
© www.soinside.com 2019 - 2024. All rights reserved.