Функция обратного вызова add_shortcode()
должна возвращать содержимое, а не печатать его.
То есть вам нужно return $pack->post_title
вместо echo $pack->post_title
.
Примерно так:
function wpc_shortcode_pack_title() {
global $pack;
return $pack->post_title;
}
add_shortcode( 'sub_name', 'wpc_shortcode_pack_title' );
Редактировать: После просмотра источника «WP User Frontend Pro»:
$pack
, кажется, получает свое значение от WPUF_Subscription::get_subscription()
, передавая идентификатор подписки, который в основном получает сообщение с этим идентификатором.
Идентификатор подписки, кажется, получает свое значение от WPUF_Subscription::get_user_pack()
, передавая пользователя id.
Итак, я думаю, вы могли бы позвонить get_current_user_id()
и попробовать что-то вроде этого:
function wpc_shortcode_pack_title() {
$user_id = get_current_user_id();
if ( ! class_exists( 'WPUF_Subscription' ) ) {
return 'WP User Frontend Pro is not installed/activated';
}
$user_sub = WPUF_Subscription::get_user_pack( $user_id );
$pack = WPUF_Subscription::get_subscription( $user_sub['pack_id'] );
return $pack->post_title;
}
add_shortcode( 'sub_name', 'wpc_shortcode_pack_title' );
Edit # 2: Чтобы получить дату истечения срока действия, вы должны сделать что-то похожее:
function wpc_shortcode_pack_title() {
$user_id = get_current_user_id();
if ( ! class_exists( 'WPUF_Subscription' ) ) {
return 'WP User Frontend Pro is not installed/activated';
}
// Get WPUF subscription/pack
$user_sub = WPUF_Subscription::get_user_pack( $user_id );
$pack = WPUF_Subscription::get_subscription( $user_sub['pack_id'] );
// Get expiration date
$expire = ( $user_sub['expire'] == 'unlimited' ) ? ucfirst( 'unlimited' ) : wpuf_date2mysql( $user_sub['expire'] );
return sprintf(
'Subscription name: %1$s | Expire date: %2$s',
$pack->post_title,
wpuf_get_date( $expire )
);
}
add_shortcode( 'sub_name', 'wpc_shortcode_pack_title' );