Автоматически устанавливайте пароль по умолчанию для всех сообщений в определенной категории
Допустим, у нас есть категория со слизняком protected_category
и некоторыми сообщениями в ней.
Есть ли способ заставить все сообщения в этой категории быть защищенными паролем с использованием пароля по умолчанию?
ОБНОВЛЕНИЕ: Я нашел решение, как установить пароль по умолчанию для всех сообщений в пользовательском типе сообщения:
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
1 answers
Это должно делать то, что вы хотите:
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
(и у них есть пароль); - вы должны использовать действие
save_post
(как предложено в приведенном ниже комментарии и связанном ответе); - объект
$post
, который передается в функции (save_post
, а такжеdefault_content
), не указатель (ссылка), поэтому все, что вы делаете, чтобы объект остается внутри функции (если вы не вставите его в базу данных).
Счастливой защиты!
1
Author: tfrommen, 2014-02-21 11:58:42