如何使用具有参数的函数在 PHP 中创建短代码
How to create shortcodes in PHP with functions that have parameters
我正在构建一个内部网,我希望用户能够在其中向其他用户组发送电子邮件。我已经成功创建了一个函数,该函数 returns 用户电子邮件列表取决于他们的元数据(作为参数传递)。
但我需要帮助创建短代码。例如,一个短代码输出所有喜欢蓝色的用户的邮件列表(来自用户注册表的数据)。
我试过简单的 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>";
}
您可以修改该代码,使其与简码一起使用。这是一个例子:
/**
* 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 );
我正在构建一个内部网,我希望用户能够在其中向其他用户组发送电子邮件。我已经成功创建了一个函数,该函数 returns 用户电子邮件列表取决于他们的元数据(作为参数传递)。
但我需要帮助创建短代码。例如,一个短代码输出所有喜欢蓝色的用户的邮件列表(来自用户注册表的数据)。
我试过简单的 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>";
}
您可以修改该代码,使其与简码一起使用。这是一个例子:
/**
* 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 );