Поддержка Проблемы и решения WordPress и большая бд

  • Решено yasherkrut

    (@yasherkrut)


    Добрый вечер.
    Есть сайт на Вордпрессе. После импорта базы данных с 75 000 пользователей необходимо было на каждого пользователя создать по страничке. Странички создавались скриптом по 3 000 за раз, чтобы скрипт не повис. В итоге, когда было создано 75 000 страниц в админке пропали настройки чтения (этот пункт полностью пуст). Ещё админка стала очень долго думать при переходе в пункты «страницы», «чтение» (последнее, наверно, допускается при таком объёме?).
    Настораживает именно пропажа настроек чтения. Нормальное ли это явление при такой большой базе? Или всё-таки что-то пошло не так?

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Нормальное ли это явление при такой большой базе?

    Конечно же нет. Наверняка скрипт работал мимо ВП и Вы поломали базу.

    Коме того непонятно зачем нужно было создавать «странички» (это вообще что в терминах ВП?), если в ВП уже все есть.

    Здравствуйте,

    Под настройками чтения как я понимаю подразумеваются «Visibility: Public/Private»? Эти поля должны показываться вне зависимости от количества постов. Попробуйте создать новый пост вручную в админке и посмотрите, будут ли эти поля отображаться для него. Скорее всего, вы упустили что-то в процессе импорта с мета-данными постов.

    С уважением,
    Павел

    уточните, куда добавлены, в страницы или записи?
    Если как страницы, то будет тормозить.

    Модератор Yui

    (@fierevere)

    ゆい

    еще бы уточнили на каком хостинге все это работает…
    BigData и HiLoad требуют соответствующего подхода, никакой речи о шаредном LAMP тут уже идти не может

    Автор yasherkrut

    (@yasherkrut)

    Хостинг — timeweb. Создавались именно страницы (pages), а не посты. Настройки чтения — это пункт меню «Настройки»->»Чтение» в админке. Этот раздел теперь полностью пуст.

    За незнанием как грамотно создать 75 000 страниц, было сделано следующее:

    в functions.php написал такой код:

    // создание страниц для 75 000 пользователей
    add_action( 'personal_options', 'ozh_personal_options2'); 
    
    function ozh_personal_options2() {
    
    if(current_user_can('administrator')) {
    
    $current = get_current_user_id();
    if ($current == 1) { // профиль админа
    
    $all_users = get_users('role=author&number=3000&offset=0&orderby=ID');
    
    foreach ($all_users as $user) {
    
    $new_page = array(
    'post_type' => 'page',
    'post_title' => id . $user->ID,
    'post_content' => '',
    'post_status' => 'publish',
    );
    
    $new_page_template = 'page-users.php';
    
    $new_page_id = wp_insert_post($new_page);
    
    if(!empty($new_page_template)) {
    update_post_meta($new_page_id, '_wp_page_template', $new_page_template);
    }
    }
    }
    } 
    }

    Повесил это на хук персональные настройки, не ругайте сильно, без понятия был как решить задачу. Меняя значение offset (c 0, потом 3000, потом 6000…) создавал по 3000 страниц, пока не создал необходимое число.

    • Ответ изменён 4 года назад пользователем SeVlad. Причина: Оформляйте, пож, код как следует

    За незнанием как грамотно создать 75 000 страниц

    Зачем?!! В ВП и так есть страницы авторов.

    ЗЫ. И не нужно мне писать через форму если я не просил, или Вы не предлагаете денег. По моему там понятно написано.

    Автор yasherkrut

    (@yasherkrut)

    Тогда у меня следующие вопросы:

    1. Какой минимальной информации из БД Вордпрессу вообще достаточно для создания нового пользователя, если базу импортируют? Особенно имеется ввиду таблица wp_usermeta. На основе наблюдения, какие строки в БД создаёт ВП при регистрации нового пользователя, были импортированы таблицы в следующем виде:

    wp_users:
    ID, user_login, user_pass, user_nicename, user_email, user_url (оставляли пустым), user_registered, user_activation_key (пустое), user_status(0), display_name

    wp_usermeta (буду приводить значения столбцов meta_key и meta_value на каждого пользователя):
    description —
    rich_editing — true
    comment_shortcuts — false
    show_admin_bar_front — true
    locale —
    wp_capabilities — a:1:{s:6:»author»;b:1;}
    wp_user_level
    default_password_nag
    nickname
    admin_color — fresh
    use_ssl

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

    2. У меня в теме не было шаблона страницы author.php, поэтому спасибо, что подсказали. И вопрос такой: вот у меня уже есть 75 000 пользователей, мне достаточно добавить к себе шаблон author.php и в нём указать: какие данные о пользователе я хочу там выводить? ВП создаст эти страницы автоматически? Они будут так же отображаться в разделе «страницы»? И где я укажу, например, что у каждого юзера должен быть url вида «/id123»?

    как в идеале импортируются пользователи?

    Плагином для импорта юзеров из csv (или др.)

    мне достаточно добавить к себе шаблон author.php и в нём указать: какие данные о пользователе я хочу там выводить? ВП создаст эти страницы автоматически?

    Да.

    Они будут так же отображаться в разделе «страницы»?

    Нет. Это виртуальные страницы. А какие данные юзера выводить — это всё в его профиле можно задавать

    И где я укажу, например, что у каждого юзера должен быть url вида «/id123»?

    При включённом ЧПУ слаг будет равен логину юзера.
    Что бы сделать что Вы хотите — нужно изменить правила формирования ЧПУ. Вряд ли это хорошая идея.

    Автор yasherkrut

    (@yasherkrut)

    При включённом ЧПУ слаг будет равен логину юзера.
    Что бы сделать что Вы хотите — нужно изменить правила формирования ЧПУ. Вряд ли это хорошая идея.

    Как изменить правила формирования ссылок? У меня подключена авторизация через социальные сети, поэтому многие пользователи имеют логины вида «vkontakteuser», «facebookuser» и т.п. Вариант с логином не подходит. Мне нужно, чтобы url пользователя имел вид «http://site.ru/author/{id}» или просто «http://site.ru/{id}». ЧПУ пока отключено.

    Как изменить правила формирования ссылок?

    Я могу показать только https://developer.wordpress.org/reference/classes/wp_rewrite/
    Сам никогда не озадачивался такой задачей.

    Но!

    У меня подключена авторизация через социальные сети,

    У Вас масса юзеров и Вы не знаете не только о страницах автора, но и даже о существовании плагинов для управление юзерами? о_О А ведь наверняка есть и такие что умеют назначать правила пермалинков.

    ЧПУ пока отключено.

    если без ЧПУ, тогда пл умолчанию будет как раз то, что вы хотите: /?author=ID

    Вот простой поиск по каталогу и обнаружен https://wordpress.org/plugins/edit-author-slug/

    при включённом ЧПУ можно назначить разные слаги (но нет никаких гарантий что последний вариант будет корректно работать)

    И не только эти слаги.

    Я для плагина WP-Recall выпускал дополнение Pretty URL Author — работает при включенном ЧПУ и позволяет юзеру сменить свой урл (по типу как в ВК) — таким образом в урл избавляет от вида ваш-сайт/author/dizzygmail-com на ваш-сайт/author/dizzy или любой другой.
    Но повторюсь — нужно держать включенным чпу.
    Как выше писали при отключенном чпу кабинет будет содержать только id юзера /?author=1 например

    Ну и в целях безопасности — в урл нет логина пользователя — а это значит злоумышленнику брутфорсить сложней. Хотя потеря пользователя (если это роль автор) — не страшно.

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Тема «WordPress и большая бд» закрыта для новых ответов.