当前位置: 首页 > 知识库问答 >
问题:

Wordpress钩子显示最新的挂起帖子,而不是已经发布的帖子

东门深
2023-03-14

我被困在一件事情上,我确信这件事情一定很简单,但却让我发疯。我在工作中被迫使用WordPress,我对它没有任何经验,到目前为止,我很难理解它是如何操作挂钩和过滤器的

我想要的非常简单:
我正在使用最新帖子块来显示用户写的帖子。除了我正在处理的页面将是网站版主的前端,版主必须查看“待定”状态的帖子,而不是“发布”状态的帖子。我在编辑器中找不到任何选项来更改它,所以我尝试设置一个钩子来更改“post_status”的查询=


    function name_of_the_function( $query ) {
        if( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') && $query->is_main_query() ) {
            $query->set( 'post_status', 'pending' );
            return $query;
        }
    }
    add_filter( 'pre_get_posts', 'name_of_the_function' );

如果我离开这个功能完全一样,但写'发布'而不是'待定'页面显示正确的最后发表的帖子,但与'待定'我得到的消息我之前提到。
我想补充一点,我确实有待处理的帖子,如果我在页面模板中写以下内容,它们会被发现:


    $args = array (
        'cat'           => 5,
        'post_status'   => 'pending'
    
    );
    $query = new WP_Query( $args );
    while ( $query->have_posts() ) {
        $query->the_post();
        echo get_the_title();
    }



请直接在wp includes/最新帖子中查看。php文件,我更改:


    $args = array(
            'posts_per_page'   => $attributes['postsToShow'],
            'post_status'      => 'publish',
            'order'            => $attributes['order'],
            'orderby'          => $attributes['orderBy'],
            'suppress_filters' => false,
        );

致:

 

    $args = array(
            'posts_per_page'   => $attributes['postsToShow'],
            'post_status'      => 'pending',
            'order'            => $attributes['order'],
            'orderby'          => $attributes['orderBy'],
            'suppress_filters' => false,
        );


它可以工作并显示挂起的帖子,但我当然不能使用它,因为每次WordPress更新时文件都会被删除<很抱歉发了这么长的帖子,但我现在迷路了,不知道还能做些什么,我已经查看了所有其他的互联网,但找不到答案,我真的非常感谢任何关于这件事的帮助,提前谢谢。

共有1个答案

孟增
2023-03-14

通过将pre\u get\u posts$query一起使用-

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

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

 类似资料:
  • 我有一个静态页面,其中10个容器位于index.php文件的不同位置,我想显示10篇最新文章。我想像这样回显帖子的数据(标题、文本、缩略图、作者、时间): 我的PHP文件: 提前谢谢,我感谢你能提供的任何帮助。

  • 问题是...当我点击编辑文章/编辑页面时,它试图打开http://localhost/site/wp-admin/post-108.php?post=286 我不记得我到底做了什么,但它一定是在我的IDE重构代码后开始的,当时我正在重命名模板文件。 没有邮政108。php在wp admin文件夹或我的主题文件夹中,但有帖子。php。我不知道它为什么要开108后。不存在的php。 注意:这是一个自定

  • 我觉得这个问题有一个非常简单的解决方案。但是,在尝试解决了大约3个小时未果后,我谦卑地来找你。 一个自定义的帖子类型,乐队,已经创建,并有几个自定义字段(这是通过高级自定义字段插件创建的。) 我将如何获得和显示的内容(特别是自定义字段数据)的特定带条目(使用其ID或标题或段塞)内的一个常规的帖子?(见下图) 我们必须提供ID/title/slug,以便它知道要显示的band post的内容 短代码

  • 我已经使用代码设置了WordPress自定义帖子类型。我已经设法让自定义帖子显示在“归档”页面中,但如果我单击“归档”页面中的链接,WP无法找到单个帖子页面。 我想我可能对定制的post permalinks有问题。希望有人能帮我 functions.php 页面模板 要显示自定义帖子,我设置了一个带有WP查询的新页面模板: 页面模板代码似乎工作和所有自定义帖子显示预期但当我点击标题链接我得到一个

  • 好吧,这一定很容易,我就是搞不懂为什么什么都不管用。 我有一个wordpress主题和3个自定义帖子类型。我想限制对大多数帖子的访问,并允许管理员使一些帖子可供公众查看。我希望它尽可能简单。 我目前拥有的是,我已经将所有帖子设置为默认为private,然后管理员可以进入并将任何他喜欢的帖子设置为“public”,以便未登录的人可以看到它们。 问题是,我无法在fontend上为登录用户显示私人帖子。

  • 在一个新的WordPress模板中,我想自定义单个。php,以便仅向帖子作者显示评论列表。 其他用户(客人和其他帖子作者)不应该看到评论或空白。 总之,帖子作者(登录时)可以在他的帖子底部看到评论列表,但在其他作者写的帖子底部看不到任何内容。 我应该对下面的代码应用什么条件代码? 这仅适用于前端。我不关心管理面板。