anton
anton

Reputation: 68

how to create a shortcode from a variable in plugin

i'm using WP User Frontend Pro plugin i want to echo the pack title using a shortcode to put it in bakery visual. all what i know is : this is the title $pack->post_title;

$pack is coming from here :

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;
}

i try to do something like this :

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

to explain more the slected code in line 5 is working correctly in the plugin pages but i want it as a shortcode enter image description here

but it didn't work any help please ?

Upvotes: 0

Views: 258

Answers (1)

over-engineer
over-engineer

Reputation: 1053

The callback function of add_shortcode() should return the content, not print it.

Meaning, you have to return $pack->post_title instead of echo $pack->post_title.

Like so:

function wpc_shortcode_pack_title() {
  global $pack;
  return $pack->post_title;
}

add_shortcode( 'sub_name', 'wpc_shortcode_pack_title' );

Edit: After taking a look at the source of “WP User Frontend Pro”:

$pack seems to be getting its value from WPUF_Subscription::get_subscription() passing the subscription id, which basically gets the post with that id.

The subscription id seems to be getting its value from WPUF_Subscription::get_user_pack() passing the user id.

So, I guess you could call get_current_user_id() and try something like this:

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: To get the expire date as well, you would do something similar:

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' );

Upvotes: 2

Related Questions