Как создать шорткоды в PHP с функциями, имеющими параметры - PullRequest
0 голосов
/ 03 апреля 2019

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

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

Я пробовал простой 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>";

}

1 Ответ

0 голосов
/ 03 апреля 2019

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

/**
 * 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 );
...