сделать ваши сообщения защищенными паролем по умолчанию

Изначально я хотел иметь возможность защитить паролем категорию. По крайней мере, я хотел, чтобы он был защищен паролем, но желательно с именем пользователя и паролем для входа. Поскольку в течение нескольких дней я безуспешно пытался найти решение, я прибегнул к встроенной в WordPress защите паролем для сообщений.

Проблема, с которой я сталкиваюсь, заключается в том, что я буду публиковать сообщения по электронной почте, и для того, чтобы эти сообщения были защищены паролем, мне нужно войти в Wordpress, а затем вручную выбрать «защищенный паролем» и ввести пароль на панели инструментов.

Я хотел бы, чтобы все сообщения, которые появляются в определенной категории, были защищены паролем с одним и тем же паролем по умолчанию. Устранение необходимости входить в Wordpress и вручную выбирать защиту паролем.

Я знаю, что есть функция <?php post_password_required( $post ); ?>, которую мне нужно использовать, но я не знаю, как ее реализовать и где.


person user1212576    schedule 15.02.2012    source источник


Ответы (2)


Основано на этом ответе WordPress StackExchange. Проверял только с обычной приборной панелью. Публикация по электронной почте должна быть протестирована, но я полагаю, что хук вызывается в такой публикации.

add_action( 'save_post', 'wpse51363_save_post' );

function wpse51363_save_post( $post_id ) {

    //Check it's not an auto save routine
     if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
          return;

    //Check it's not an auto save routine
     if ( wp_is_post_revision( $post_id ) ) 
          return;

    //Perform permission checks! For example:
    if ( !current_user_can( 'edit_post', $post_id ) ) 
          return;

    $term_list = wp_get_post_terms(
        $post_id, 
        'category', 
        array( 'fields' => 'slugs' ) 
    );

    if( in_array ( 'the-category-slug', $term_list ) )
    {
        // Unhook this function so it doesn't loop infinitely
        remove_action( 'save_post', 'wpse51363_save_post' );

        // Call wp_update_post update, which calls save_post again. 
        wp_update_post( array( 
            'ID' => $post_id,
            'post_password' => 'default-password' ) 
        );

        // Re-hook this function
        add_action( 'save_post', 'wpse51363_save_post' );
    }
}
person brasofilo    schedule 25.11.2012

person    schedule
comment
Спасибо за этот фрагмент кода, который может оказать немедленную помощь. Надлежащее объяснение значительно повысило бы его образовательную ценность, показав, почему это хорошо. решение проблемы и сделает его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются. - person basvk; 04.07.2017