计划为新成员取消隐藏已发布的帖子

时间:2015-01-16 作者:Simon

所以我想出了这个主意。它的工作原理类似于自动应答器,它每7天(比方说)向所有订阅者发送一次已经准备好和计划好的内容。对于新订阅者,它从内容1开始,然后再发送内容2,以此类推。

我需要这个在wordpress上,除了会有注册和注册后,新成员只能看到第1个帖子。7天后,他会收到更多未隐藏的帖子,等等。另一位新成员无法看到这些新帖子,直到他等待了7天。

你明白了吗?也许你可以帮我找到一个插件,如果它存在的话。如果没有,也许会有志愿者创建这样的插件?无论如何,我真的很感激你的任何帮助!

2 个回复
最合适的回答,由SO网友:Михаил Семёнов 整理而成

您可以计算用户可以看到的帖子数量,如下所示:(int) ( ( time() - strtotime( get_userdata(get_current_user_id( ))->user_registered ) ) / ( 7 * 24 * 60 * 60 ) ) + 1;

因此,您为pre_get_posts 为了向用户显示他在您的网站上花费的尽可能多的帖子,请在几周内完成。

为了防止看到自定义输入链接的内容,您将过滤器添加到内容中,检查当前帖子是否在当前用户可用的帖子中。

当然,您可以为管理员显示所有内容

add_filter( \'pre_get_posts\', \'prefix_pre_get_posts\' );

function prefix_pre_get_posts( $query ) {
    if( ! is_admin() && \'post\' == $query->post_type ) { // is_main_query() ?
        $post_pre_page = null;
        if( is_user_logged_in() && ! current_user_can( \'administrator\' ) ) {
            $post_pre_page = (int) ( ( time() - strtotime( get_userdata(get_current_user_id( ))->user_registered ) ) / ( 7 * 24 * 60 * 60 ) ) + 1;
        } elseif( ! is_user_logged_in() ) {
            $post_pre_page = 0;
        }
        if( ! is_null( $post_pre_page ) ) {
            $query->set( \'posts_per_page\', $post_pre_page );
            // Show pastest posts first
            $query->set( \'order\', \'DESC\' );
            $query->set( \'orderby\', \'date\' );
        }
    }
}

add_filter( \'the_content\', \'prefix_filter_the_content\' );

function prefix_filter_the_content( $content ) {

    if( current_user_can( \'administrator\' ) )
        return $content;
    $current_id = get_the_id();
    $allowed_posts = get_posts( array( \'posts_per_page\' => -1 ) );
    $flag = false;
    if( ! empty( $allowed_posts ) )
        foreach( $allowed_posts as $p )
            if( $current_id == $p->ID ){
                $flag = true;
                break;
            }
    if( ! $flag ) {
        return __( \'Your are not able to see these post\', \'your-textdomain\' );
    }
    return $content;
}
只需将这些代码添加到functions.php.

注:将7天更改为3天(例如),请在此处更改(7 * 24*60*60)“至”(3 * 24*60*60)\'

SO网友:karpstrucking

使用post元字段存储一个数值,该数值表示一个人在查看此特定帖子之前必须成为成员的天数。

使用pre_get_posts 检查成员的年龄并调整$query 相应地包括meta_query 仅显示值小于或等于成员年龄的帖子。

如果需要,我可以编写一些伪代码。

结束

相关推荐

必须使用插件自动加载器:如何正确使用get_plugins()?

我的autoloader类负责加载必须使用的插件,这些插件不位于mu-plugins 文件夹要定位它们,我需要使用get_plugins() 作用According to Codex, 该函数接受一个参数:$plugin\\u folder(string)(可选):单个插件文件夹的相对路径。我的文件层次结构如下所示:|-- /mu-plugins | |-- autoload.php // only includes wpmu/autoload.php&#

计划为新成员取消隐藏已发布的帖子 - 小码农CODE - 行之有效找到问题解决它

计划为新成员取消隐藏已发布的帖子

时间:2015-01-16 作者:Simon

所以我想出了这个主意。它的工作原理类似于自动应答器,它每7天(比方说)向所有订阅者发送一次已经准备好和计划好的内容。对于新订阅者,它从内容1开始,然后再发送内容2,以此类推。

我需要这个在wordpress上,除了会有注册和注册后,新成员只能看到第1个帖子。7天后,他会收到更多未隐藏的帖子,等等。另一位新成员无法看到这些新帖子,直到他等待了7天。

你明白了吗?也许你可以帮我找到一个插件,如果它存在的话。如果没有,也许会有志愿者创建这样的插件?无论如何,我真的很感激你的任何帮助!

2 个回复
最合适的回答,由SO网友:Михаил Семёнов 整理而成

您可以计算用户可以看到的帖子数量,如下所示:(int) ( ( time() - strtotime( get_userdata(get_current_user_id( ))->user_registered ) ) / ( 7 * 24 * 60 * 60 ) ) + 1;

因此,您为pre_get_posts 为了向用户显示他在您的网站上花费的尽可能多的帖子,请在几周内完成。

为了防止看到自定义输入链接的内容,您将过滤器添加到内容中,检查当前帖子是否在当前用户可用的帖子中。

当然,您可以为管理员显示所有内容

add_filter( \'pre_get_posts\', \'prefix_pre_get_posts\' );

function prefix_pre_get_posts( $query ) {
    if( ! is_admin() && \'post\' == $query->post_type ) { // is_main_query() ?
        $post_pre_page = null;
        if( is_user_logged_in() && ! current_user_can( \'administrator\' ) ) {
            $post_pre_page = (int) ( ( time() - strtotime( get_userdata(get_current_user_id( ))->user_registered ) ) / ( 7 * 24 * 60 * 60 ) ) + 1;
        } elseif( ! is_user_logged_in() ) {
            $post_pre_page = 0;
        }
        if( ! is_null( $post_pre_page ) ) {
            $query->set( \'posts_per_page\', $post_pre_page );
            // Show pastest posts first
            $query->set( \'order\', \'DESC\' );
            $query->set( \'orderby\', \'date\' );
        }
    }
}

add_filter( \'the_content\', \'prefix_filter_the_content\' );

function prefix_filter_the_content( $content ) {

    if( current_user_can( \'administrator\' ) )
        return $content;
    $current_id = get_the_id();
    $allowed_posts = get_posts( array( \'posts_per_page\' => -1 ) );
    $flag = false;
    if( ! empty( $allowed_posts ) )
        foreach( $allowed_posts as $p )
            if( $current_id == $p->ID ){
                $flag = true;
                break;
            }
    if( ! $flag ) {
        return __( \'Your are not able to see these post\', \'your-textdomain\' );
    }
    return $content;
}
只需将这些代码添加到functions.php.

注:将7天更改为3天(例如),请在此处更改(7 * 24*60*60)“至”(3 * 24*60*60)\'

SO网友:karpstrucking

使用post元字段存储一个数值,该数值表示一个人在查看此特定帖子之前必须成为成员的天数。

使用pre_get_posts 检查成员的年龄并调整$query 相应地包括meta_query 仅显示值小于或等于成员年龄的帖子。

如果需要,我可以编写一些伪代码。