自动将默认密码设置为特定类别中的所有帖子

时间:2014-02-20 作者:NoSense

假设我们有一个包含slug的类别protected_category 还有一些帖子。有没有办法强制该类别中的所有帖子使用默认密码进行密码保护?

UPDATE: 我找到了一个解决方案,可以在自定义帖子类型中为所有帖子设置默认密码:

add_filter( \'default_content\', \'set_default_values\', 10, 2 );
function set_default_values( $post_content, $post ) {
    if ( $post->post_type )
        switch ( $post->post_type ) {
            case \'protected_post\':
                $post->post_status = \'protected\';
                $post->post_password = \'123123\';
                break;
        }

    return $post_content; 
}
那么,我如何修改它以针对特定类别?

1 个回复
最合适的回答,由SO网友:tfrommen 整理而成

这应该满足您的需要:

add_filter(\'save_post\', \'wpse_135377_protect_post\');
function wpse_135377_protect_post($post_ID) {
    if (in_array(
        \'protected_category\',
        wp_get_post_categories($post_ID, array(\'fields\' => \'slugs\'))
    )) {
        // we have to remove the function
        // as it will be called by `wp_update_post` (=> infinite loop)
        remove_filter(\'save_post\', \'wpse_135377_protect_post\');
        wp_update_post(array(
            \'ID\' => $post_ID,
            \'post_password\' => \'123123\',
        ));
        // now we add it again
        add_filter(\'save_post\', \'wpse_135377_protect_post\');
    }
} // function wpse_135377_protect_post
您的代码库中有几个问题:

没有post状态protected—受密码保护的帖子具有帖子状态publish 还有(他们有密码)save_post 行动(如以下评论和链接答案所示)

  • $post 传递到函数中的对象(save_post 以及default_content) 是not 指针(引用),因此您对对象所做的任何操作都将保留在函数中(除非您将其插入db)
  • 快乐保护!

    结束