Intereting Posts
Пользовательская роль не может удалить пользовательский тип сообщения Добавить пользовательский фон в раздел на главной странице Есть ли простой способ показывать рекламу только на странице WordPress, когда она станет популярной? Ошибка плагина Выберите должности, у которых нет отношений в пользовательской таксономии Изменить шаблон страницы на основе категории Написание файла манифеста кэша для блога WordPress (кэш приложений, автономные веб-приложения) Многоузловая панель подсайта перенаправляет на / wp-admin / Гравитационные формы | Объект формы NULL Изменить По умолчанию wp_mail From, без влияния на формы тяжести Регистрация пользователя на субсайте в многоузловой конфигурации Условные обозначения таксономического тега Удалить пользовательскую таксономию из-за постоянной связи Проблемы с параметрами_рекламы и администратора Ограничить рекламные объявления Google на определенные сообщения в блоге

Автоматически устанавливать пароль по умолчанию для всех сообщений в определенной категории

Допустим, у нас есть категория с 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; } 

Итак, как я могу изменить это для целевой категории?

Это должно делать то, что вы хотите:

 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 

В вашей кодовой базе было несколько проблем:

  • нет защищенных сообщений, protected паролем, а статус publish также publish (и у них есть пароль);
  • вы должны использовать действие save_post (как предлагается в следующем комментарии и связанном ответе);
  • объект $post который передается в функции ( save_post а также default_content ), не является указателем (ссылкой), поэтому все, что вы делаете с объектом, остается в пределах функции (если вы не вставляете ее в db).

Счастливая защита!