Как проверить условие перед публикацией сообщения (Wordpress - Hooks) - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу проверить условие, прежде чем пользователь сможет что-то опубликовать. У пользователя должен быть джетон (метаданные пользователя), в противном случае пост не будет помещаться в базу данных, иначе будет и один джетон будет записан. Какой крючок или фильтр я ищу?

/* Jeton is French for token or coin */

add_action('what_is_the_action_or_filter_im_looking_for', 'check_jeton_before_publish');

function check_jeton_before_publish($data) {

    $user_id = get_current_user_id(); // Get user ID
    $meta_jeton = get_user_meta($user_id, 'jeton'); // Jeton count

    if ($meta_jeton == 0 || empty($meta_jeton)) { // No jeton ? No post !

        return;

    } else { // Jeton ? Post, then burn one jeton

        $new_jeton_count = $meta_jeton - 1;
        update_user_meta($user_id, 'jeton', $new_jeton_count);
        return $data;
    }
}

Спасибо за ваше драгоценное время!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Я думаю, что ответ от @KGreene стоит попробовать, спасибо за ввод.

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

0 голосов
/ 08 ноября 2019

Согласно wp_post_insert фильтр wp_insert_post_empty_content должен работать на вас.

   /**
     * Filters whether the post should be considered "empty".
     *
     * The post is considered "empty" if both:
     * 1. The post type supports the title, editor, and excerpt fields
     * 2. The title, editor, and excerpt fields are all empty
     *
     * Returning a truthy value to the filter will effectively short-circuit
     * the new post being inserted, returning 0. If $wp_error is true, a WP_Error
     * will be returned instead.
     *
     * @since 3.3.0
     *
     * @param bool  $maybe_empty Whether the post should be considered "empty".
     * @param array $postarr     Array of post data.
     */
    if ( apply_filters( 'wp_insert_post_empty_content', $maybe_empty, $postarr ) ) {
        if ( $wp_error ) {
            return new WP_Error( 'empty_content', __( 'Content, title, and excerpt are empty.' ) );
        } else {
            return 0;
        }
    }

Вы можете выполнить свои условия в фильтре wp_insert_post_empty_content и вернуть true, чтобы остановить вставку сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...