如何使用具有参数的函数在PHP中创建短代码

问题描述 投票:0回答:1

我正在建立一个内部网,我希望用户能够通过电子邮件发送其他用户组。我已成功创建了一个函数,该函数根据元数据(作为参数传递)返回用户电子邮件列表。

但我需要帮助创建短代码。例如,一个短代码,输出所有用户的邮件列表,其中蓝色为最喜欢的颜色(来自用户注册表单的数据)。

我尝试过简单的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>";

}
php wordpress shortcode
1个回答
0
投票

您可以调整该代码,以便使用短代码。这是一个例子:

/**
 * 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 );
© www.soinside.com 2019 - 2024. All rights reserved.