Поддержка → Проблемы и решения → Вставить переменную в shortcode
Вставить переменную в shortcode
-
Всем доброго времени суток.
Вообщем такая ситуация не могу вставить динамичную переменную в шорткод, помоги пожалуйста.
Есть такой шорткод:
[adverts_list name="Private" posts_per_page="12" search_bar="disabled" author="26" display="list"]
В параметр author необходимо подставлять ID пользователя на странице которого мы находимся.
В functions.php я получил этот параметр в виде $unumqq, как теперь этот параметр подставлять в шорткод, как только ни пробовал, не получается, остановился на таком варианте:function vivod_adverts() { $unumqq = um_profile_id(); echo do_shortcode('[adverts_list name="Private" posts_per_page="12" search_bar="disabled" author="'.$unumqq.'" display="list"]'); } add_shortcode('vivod_adv', 'vivod_adverts');
Но он тоже не работает. Буду благодарен за помощь.
-
я сейчас так хохотался )))
- vivod_adv — не является официальной WP функцией
- um_profile_id() — это скорее всего икота Ultimate Members
- ID пользователя имеет смысл получать оригинальным методом
Причем здесь официальная функция или нет, это я функцию эту сделал
id пользователя я получил, но как мне его в шорткод воткнуть
этот код не отрабатывает почему-то
echo do_shortcode('[adverts_list name="Private" posts_per_page="12" search_bar="disabled" author="'.$unumqq.'" display="list"]');
если вы утверждаете, что у вас действительно переменная $unumqq имеет значение, то я утверждаю, что она присутствует в $atts в функции Шорткода adverts_list()
function adverts_list($atts) { ... $author_ID = $atts['author']; echo $author_ID; ... }
Да переменная $unumqq содержит значение.
Вот функция шорткодаfunction shortcode_adverts_list( $atts ) { wp_enqueue_style( 'adverts-frontend' ); wp_enqueue_style( 'adverts-icons' ); wp_enqueue_script( 'adverts-frontend' ); $params = shortcode_atts(array( 'name' => 'default', 'author' => null, 'redirect_to' => '', 'search_bar' => adverts_config( 'config.ads_list_default__search_bar' ), 'show_results' => true, 'category' => null, 'columns' => adverts_config( 'config.ads_list_default__columns' ), 'display' => adverts_config( 'config.ads_list_default__display' ), 'switch_views' => adverts_config( 'config.ads_list_default__switch_views' ), 'allow_sorting' => 0, 'order_by' => 'date-desc', 'paged' => adverts_request("pg", 1), 'posts_per_page' => adverts_config( 'config.ads_list_default__posts_per_page' ), 'show_pagination' => true ), $atts, 'adverts_list' ); extract( $params ); if( is_numeric( $redirect_to ) ) { $action = get_permalink( $redirect_to ); } else { $action = $redirect_to; } $taxonomy = null; $meta = array(); $orderby = array(); $query = adverts_request("query"); $location = adverts_request("location"); if($location) { $meta[] = array('key'=>'adverts_location', 'value'=>$location, 'compare'=>'LIKE'); } if($category) { $taxonomy = array( array( 'taxonomy' => 'advert_category', 'field' => 'term_id', 'terms' => $category, ), ); } if($allow_sorting && adverts_request("adverts_sort")) { $adverts_sort = adverts_request("adverts_sort"); } else { $adverts_sort = $order_by; } // options: title, post_date, adverts_price $sort_options = apply_filters( "adverts_list_sort_options", array( "date" => array( "label" => __("Publish Date", "wpadverts"), "items" => array( "date-desc" => __("Newest First", "wpadverts"), "date-asc" => __("Oldest First", "wpadverts") ) ), "price" => array( "label" => __("Price", "wpadverts"), "items" => array( "price-asc" => __("Cheapest First", "wpadverts"), "price-desc" => __("Most Expensive First", "wpadverts") ) ), "title" => array( "label" => __("Title", "wpadverts"), "items" => array( "title-asc" => __("From A to Z", "wpadverts"), "title-desc" => __("From Z to A", "wpadverts") ) ) ) ); $sarr = explode("-", $adverts_sort); $sort_current_text = __("Publish Date", "wpadverts"); $sort_current_title = sprintf( __( "Sort By: %s - %s", "wpadverts"), __("Publish Date", "wpadverts"), __("Newest First", "wpadverts") ); if( isset( $sarr[1] ) && isset( $sort_options[$sarr[0]]["items"][$adverts_sort] ) ) { $sort_key = $sarr[0]; $sort_dir = $sarr[1]; if($sort_dir == "asc") { $sort_dir = "ASC"; } else { $sort_dir = "DESC"; } if($sort_key == "title") { $orderby["title"] = $sort_dir; } elseif($sort_key == "date") { $orderby["date"] = $sort_dir; } elseif($sort_key == "price") { $orderby["adverts_price__orderby"] = $sort_dir; $meta["adverts_price__orderby"] = array( 'key' => 'adverts_price', 'type' => 'NUMERIC', 'compare' => 'NUMERIC', ); } else { // apply sorting using adverts_list_query filter. } $sort_current_text = $sort_options[$sort_key]["label"] ; $s_descr = $sort_options[$sort_key]["items"][$adverts_sort]; $sort_current_title = sprintf( __( "Sort By: %s - %s", "wpadverts"), $sort_current_text, $s_descr ); } else { $adverts_sort = $order_by; $orderby["date"] = "desc"; } $args = apply_filters( "adverts_list_query", array( 'author' => $author, 'post_type' => 'advert', 'post_status' => 'publish', 'posts_per_page' => $posts_per_page, 'paged' => $paged, 's' => $query, 'meta_query' => $meta, 'tax_query' => $taxonomy, 'orderby' => $orderby ), $params); if( $category && is_tax( 'advert_category' ) ) { $pbase = get_term_link( get_queried_object()->term_id, 'advert_category' ); } else { $pbase = get_the_permalink(); } $loop = new WP_Query( $args ); $paginate_base = apply_filters( 'adverts_list_pagination_base', $pbase . '%_%' ); $paginate_format = stripos( $paginate_base, '?' ) ? '&pg=%#%' : '?pg=%#%'; include_once ADVERTS_PATH . 'includes/class-html.php'; include_once ADVERTS_PATH . 'includes/class-form.php'; if( $switch_views && in_array( adverts_request( "display", "" ), array( "grid", "list" ) ) ) { $display = adverts_request( "display" ); add_filter( "adverts_form_load", "adverts_form_search_display_hidden" ); } if( $display == "list" ) { $columns = 1; } if( adverts_request( "reveal_hidden" ) == "1" ) { add_filter( "adverts_form_load", "adverts_form_search_reveal_hidden" ); } $form_scheme = apply_filters( "adverts_form_scheme", Adverts::instance()->get("form_search"), $params ); $form = new Adverts_Form( $form_scheme ); $form->bind( stripslashes_deep( $_GET ) ); $fields_hidden = array(); $fields_visible = array(); $counter = array( "visible-half" => 0, "visible-full" => 0, "hidden-half" => 0, "hidden-full" => 0 ); foreach($form->get_fields() as $field) { $search_group = "hidden"; $search_type = "half"; if( isset( $field['meta']["search_group"] ) ) { $search_group = $field['meta']['search_group']; } if( isset( $field['meta']['search_type'] ) ) { $search_type = $field['meta']['search_type']; } $counter[ $search_group . '-' . $search_type ]++; if( $search_type == 'full' ) { $field['adverts_list_classes'] = 'advert-input-type-full'; } else if( $counter[ $search_group . '-' . $search_type ] % 2 == 0 ) { $field['adverts_list_classes'] = 'advert-input-type-half advert-input-type-half-right'; } else { $field['adverts_list_classes'] = 'advert-input-type-half advert-input-type-half-left'; } if( $search_group == "visible" ) { $fields_visible[] = $field; } else { $fields_hidden[] = $field; } } // adverts/templates/list.php ob_start(); include apply_filters( "adverts_template_load", ADVERTS_PATH . 'templates/list.php' ); return ob_get_clean(); }
Но если здесь я подставлю переменную, то тогда везде будет подставляться id
А у меня шорткод
[adverts_list name="Private" posts_per_page="12" search_bar="disabled" author="26" display="list"]
Размещен на разных страницах и где то параметр autor надо передавать, а где то нет.- Ответ изменён 4 года, 1 месяц назад пользователем 12hi89.
Остановился на таком варианте …
Что такое
um_profile_id();
не знаю. Вот так работает:function output_adverts() { // $unumqq = um_profile_id(); $author_id = 1; return do_shortcode('[adverts_list name="Private" posts_per_page="12" search_bar="disabled" author="' . $author_id . '" display="list"]'); } add_shortcode('output_adverts', 'output_adverts');
Спасибо большое, все получилось, подставил переменную которую мне нужно.
я использовал echo do_shortcode, а надо было return
- Тема «Вставить переменную в shortcode» закрыта для новых ответов.