将显示的帖子限制为仅来自选定作者的帖子

时间:2021-05-08 作者:Tuzz Samuel

是否有任何钩子或过滤器可以通过编程将显示在前端存档和仪表板中的帖子限制为仅来自指定作者ID的帖子?我们最近收到了很多垃圾邮件作者,我也想尝试这种方法,同时尝试其他方法来消除垃圾邮件。

2 个回复
最合适的回答,由SO网友:Álvaro Franz 整理而成

是的,您可以使用pre_get_posts hook. 从文档中:

在创建查询变量对象之后但在运行实际查询之前激发。

换句话说,这个钩子允许您在WP查询运行之前更改它,因此您可以根据需要加入任何条件。

以下是如何使用此挂钩的结构add_action():

// Define your callback for the action
function wpse_modify_original_query($query){
    // Here you can do whatever you want with the $query
}

// Attach your callback to the pre_get_posts action hook
add_action(\'pre_get_posts\', \'wpse_modify_original_query\');
您还可以将其与其他条件结合使用,以便仅在需要时应用其效果,如仅用于存档或管理页面,使用is_archive()is_admin().

For example:

function wpse_modify_original_query($query){
    if(is_archive() or is_admin()){
    // This query is for an archive or admin page, restrict to specific authors
    $query->set(\'author__in\', array(2,4,6)); // Your desired authors ids
    }
}
add_action(\'pre_get_posts\', \'wpse_modify_original_query\');
但正如你在问题中所提到的,只是;隐藏“;帖子并不是解决垃圾邮件问题的干净方法。如果您提供有关这些作者如何在您的仪表板上发布的更多信息,我们可以帮助您找到更好的解决方案。

例如,一个好的解决方案是在发布帖子之前验证帖子,或者至少验证新用户发布的第一篇帖子。如果是好的,那么你允许他们继续出版。

SO网友:Antti Koskinen

是的,您可以使用pre_get_posts 在运行查询之前修改查询参数的操作,例如,将其限制为仅限于某些作者。

add_action(
    \'pre_get_posts\',
    function( $query ){

        // Don\'t change custom queries, only the main one
        if ( ! $query->is_main_query() ) {
            return;
        }
        
        // Add additional conditional checks here as needed

        // Query posts only from auhtors with the following IDs
        $query->set(
            \'author__in\',
            array( 1, 2, 3, 4, 5 ) // update this
        );
        
    }
);

相关推荐

“调用数组上的成员函数Have_Posts()”在Have_Posts()上出错;

我犯了一个最奇怪的错误。尝试显示自定义循环时,出现以下错误:Fatal error : Uncaught Error: Call to a member function have_posts() on array in /.../custom-page.php:42 Stack trace: #0 /.../wp-includes/template-loader.php(106): include() #1 /.../wp-blog-header.php(19): require_once(\'