Поддержка Проблемы и решения Вставить переменную в 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');

    Но он тоже не работает. Буду благодарен за помощь.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • я сейчас так хохотался )))

    • 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"]');

    • Ответ изменён 4 года, 1 месяц назад пользователем 12hi89.
    • Ответ изменён 4 года, 1 месяц назад пользователем 12hi89.

    если вы утверждаете, что у вас действительно переменная $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

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Вставить переменную в shortcode» закрыта для новых ответов.