如何从插件中的变量创建简码

how to create a shortcode from a variable in plugin

我正在使用 WP User Frontend Pro 插件 我想使用简码来呼应包装标题,将其放入面包店视觉效果中。 我所知道的是:这是标题 $pack->post_title;

$pack 来自这里:

public function current_pack() {
    global $pack;
    $pack = $this->pack;

    if ( ! isset( $this->pack['pack_id'] ) ) {
        $pack_page = get_permalink( wpuf_get_option( 'subscription_page', 'wpuf_payment' ) );

        return new WP_Error( 'no-pack', sprintf( __( 'You must <a href="%s">purchase a subscription package</a> before posting', 'wp-user-frontend'), $pack_page ) );
    }

    // seems like the user has a pack, now check expiration
    if ( $this->expired() ) {
        return new WP_Error( 'expired', __( 'The subscription pack has expired. Please buy a pack.', 'wp-user-frontend' ) );
    }

    return $pack;
}

我试着做这样的事情:

function wpc_shortcode_pack_title() {
global $pack;
return $pack->post_title;
}
add_shortcode( 'sub_name', 'wpc_shortcode_pack_title' );

解释更多 第 5 行中选择的代码在插件页面中正常工作 但我想要它作为简码

但是没用 有什么帮助吗?

add_shortcode()的回调函数应该是return内容,而不是打印

意思是,你必须 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 似乎是通过订阅 ID 从 WPUF_Subscription::get_subscription() 获取它的值,这基本上是用那个 ID 获取 post。

订阅 ID 似乎是从 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' );

编辑 #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' );