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

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

Я пробовал простой add_shortcode('$tag , $func'), но поскольку мне нужно передать аргументы, которые не работают, он просто перечислит ВСЕ электронные письма пользователей, независимо от их метаданных.

Кто-нибудь может мне помочь?

PS. Я только начал писать код, пожалуйста, будьте любезны со мной :)

function get_user_by_meta_data ($meta_key, $meta_value) {

    $args = array(
        'meta_key'  => $meta_key,
        'meta_value'  => $meta_value
    );

    // The Query
    $user_query = new WP_User_Query( $args );

    // The Results
    $users = $user_query->get_results();
    $result = array();

    // User Loop
    foreach ( $users as $user ) {
        $result[] = $user->user_email;
    }

    return "<span>" . implode( ', ', $result ) . "</span>";

}
0
lindag. 3 Апр 2019 в 20:20

1 ответ

Лучший ответ

Вы можете адаптировать этот код для работы с шорткодом. Вот пример:

/**
 * Register the [mailing_list] shortcode.
 *
 * Usage: [mailing_list meta_key='color' meta_value='blue']
 *
 * @author @cabrerahector
 * @param array $atts Shortcode parameters
 * @return string
 */
function wp44162_mailing_list_shortcode( $atts ) {
    $args = shortcode_atts(array( 
        'meta_key' => '',
        'meta_value' => '',
    ), $atts );

    // The Query
    $user_query = new WP_User_Query( $args );

    // The Results
    $users = $user_query->get_results();
    $result = array();

    // We have some users that match the conditions
    if ( ! empty($users) ) {
        // User Loop
        foreach ( $users as $user ) {
            $result[] = $user->user_email;
        }

        //return "<span>" . implode( ', ', $result ) . "</span>";
        return "<a href=\"mailto:" . implode(',', $result) . "\">" . $args['meta_value'] . "</a>";
    }

    // No users that matched the criteria were found
    return 'No users found.';
}
add_shortcode( 'mailing_list', 'wp44162_mailing_list_shortcode');

Обновление:

Если вы хотите запросить несколько цветов, вам необходимо сохранить каждый цвет, выбранный пользователем отдельно (см. add_user_meta () для получения дополнительной информации). Это позволит вам сделать следующее:

$args = shortcode_atts(array( 
    'meta_key' => '',
    'meta_value' => '',
), $atts );

$query = array(
    array(
        'key'     => $args['meta_key'],
        'value'   => explode(',', $args['meta_value']), // array of colors
        'compare' => 'IN'
    )
);

// The Query
$user_query = new WP_User_Query( $query );
0
cabrerahector 4 Апр 2019 в 18:53