Intereting Posts
несколько пользовательских объявлений типа выбора типа публикации Поиск в WordPress без поиска страниц Что бы сделать процесс обновления плагина завершенным, но не сообщать как таковое? Можно ли изолировать и использовать функции WordPress вне wordpress Как я могу отправлять редакцию в свой блог программно? Woocommerce: Показать категорию в алфавитном порядке на странице магазина Как открыть полный редактор мультимедиа в кадре Групповая маршрутизация и администрирование Как безопасно подключить некоторые Unicode-тексты к календарю? category- {slug} .php работает только с перерывами? Почему пользовательский тип сообщения нуждается в настройке «иерархических» аргументов? Как я могу предварительно указать URL-адрес кнопки добавления медиафайла Render shortcodes с get_post_custom Пользовательский тип почтового сообщения пустой после сохранения Term Meta – сохранение нескольких значений в одной форме с помощью опций выбора

Как присоединиться к запросу $ wpdb с метафорой пользователя, используя значение по умолчанию, если оно не существует?

Я внедряю новую функцию на веб-сайт, который дает пользователям определенную сумму кредитов каждую неделю, если они имеют определенный уровень членства.

Мы используем Paid Memberships Pro и MyCred . Оба являются отличными плагинами, которые работают отлично.

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

Запрос для извлечения пользователей, который завернут в функцию, называемую dt_get_pmro_users_at_level и правильно подготовлен:

 SELECT user_id, startdate FROM wp_pmpro_memberships_users WHERE membership_id IN ( SELECT id FROM wp_pmpro_membership_levels WHERE name = 'Premium' ) AND status = 'active' ???? INNER JOIN wp_usermeta ????? 

Как присоединиться к указанному выше запросу с помощью мета-проверки пользователя для last_awarded_points_date , используя startdate в качестве значения по умолчанию (если не существует)?

Улов: он должен быть обратно совместимым. Мне нужно предположить, что некоторые пользователи не будут иметь meta last_awarded_points_date .

Я уверен, что это прогулка в парке для SQL-мастеров. Который я определенно не.

На данный момент я вытаскиваю всех пользователей из базы данных, делаю еще один вызов БД, чтобы вытащить usermeta, конвертировать даты с MySQL в временные метки unix и проверять их отдельно … что является sloooooow .

Для контекста, это вся процедура:

 function dt_membership_credit_cron( $level_name, $credits ) { // fetches all users // using the query above $users = dt_get_pmpro_users_at_level( $level_name ); // get current time $time_now = current_time( 'timestamp' ); // for each user... foreach ( $users as $user ) { // each $user is a stdClass with // user_id Int // startdate MySQL formated timestamp // get last time $last_time = get_user_meta( $user->user_id, 'dt_last_awarded_points_date', true); // If no last time if ( empty( $last_time ) ) { $last_time = $user->startdate; } // get differece between last time and now $diff = $time_now - strtotime( $last_time); // if difference is smaller than a week in seconds // its not time ... yet. Skip if ( $diff < 60 * 60 * 24 * 7 ) { continue; } // otherwise... // grant credits mycred_add( 'credit', $user->user_id, $credits, 'Credit' ); // update new date update_user_meta( $user->user_id, 'dt_last_awarded_points_date', date( 'Ymd H:i:s', $time_now) ); } } 

Любая помощь получает высокую оценку. Я очень открыт для предложений о том, как улучшить этот код!

Ура!