как создать шорткод из переменной в плагине - PullRequest
0 голосов
/ 15 апреля 2020

Я использую плагин 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, но я хочу, чтобы он был шорткодом enter image description here

, но он не работал помогите пожалуйста?

1 Ответ

1 голос
/ 15 апреля 2020

Функция обратного вызова 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' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...