Вывод информации на динамической странице

Тема в разделе "Wordpress", создана пользователем Iga, 14 янв 2019.

Информация :
Все пользователи Nulled-а обязаны ознакомиться с основными правилами форума!
Правила: Правила форума
Правила раздела: ОБЩИЕ СВЕДЕНИЯ | Правила раздела | Правила оформления [​IMG]
Полезное: Раскодирование шаблонов | Шорткоды | Поиск плагинов | [​IMG] Складчины
Плюшки: functions.PHP - часть 1 | часть 2
Разделы WP: Шаблоны | CodeCanyon
Модераторы: ponoroshca
  1. Iga

    Iga

    Регистр.:
    12 янв 2014
    Сообщения:
    333
    Симпатии:
    53
    У меня каталог фильтруется с помощью плагина facet.
    Результатом фильтрации является изменение в адресной строке вида
    Код:
    ?fwp_regions_facet=kosta-blanka&fwp_city_facet=torreveha
    Для улучшения сео мне нужно выводить заголовок в зависимости от города. В данном примере - это будет Купить недвижимость в Торревьеха.

    Мои размышления:
    Можно читать адресную строку на предмет нахождения там определённого города и выводить соответствующий заголовок.
    Код:
    strstr($_SERVER['REQUEST_URI'], 'torreveha'
    Городов вот только у меня 170 штук. Я так понимаю придётся ручками прописывать для каждого? И если добавляется новый город, то не забывать дописать условие и для него?

    Города у меня - таксономия. Можно же получить массив терминов этой таксономии и как-то с ним оперировать?
    Дальше что-то моя логика заканчивается.
     
    Последнее редактирование: 14 янв 2019
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.600
    Симпатии:
    1.510
    Скорее всего получится сделать на основе функции https://wp-kama.ru/function/get_terms
    Довольно подробно о том как её юзать расписано здесь https://misha.blog/wordpress/get_terms.html


    Скорее всего будет что-то типа такого:
    PHP:
    function getCityName() {
        
    $parsedUrl parse_url($_SERVER['REQUEST_URI']);
        if (isset(
    $parsedUrl['query']) === false) {
            return 
    false;
        }
        
    $parsedQuery parse_str($parsedUrl['query']);
        if (isset(
    $parsedQuery['fwp_city_facet']) === false) {
            return 
    false;
        }
        
    $citySlug $parsedQuery['fwp_city_facet'];
        
        
    $terms get_terms( ['taxonomy']);
        foreach (
    $terms as $term) {
            if (
    $term['slug'] == $citySlug) {
                return 
    $term['name'];
            }
        }
    }
    добавить в function.php
    $term['slug'] и $term['name'] и ['taxonomy'] - параметры своей таксономии проставьте

    В нужном месте
    PHP:
    echo getCityName();
     
    Последнее редактирование: 14 янв 2019
    Iga нравится это.
  3. Iga

    Iga

    Регистр.:
    12 янв 2014
    Сообщения:
    333
    Симпатии:
    53
    Вот тут вот я не уловил.
    UPD. уловил...не к тому контексту обдумывал.

    Я, правда, пошел по своим каким-то тропам и размышлениям...
    Можно как-то из массива
    Код:
    $params = array(
    'taxonomy' => 'building_city',
    'hide_empty' => true,
    );
    $terms = get_terms( $params );
    
    Он у меня выдаёт вот такую жбонь
    Код:
    Array ( [0] => WP_Term Object ( [term_id] => 342 [name] => Bigastro [slug] => bigastro [term_group] => 0 [term_taxonomy_id] => 339 [taxonomy] => building_city [description] => [parent] => 0 [count] => 1 [filter] => raw ) [2] => WP_Term Object ( [term_id] => 339 [name] => Daya Nueva [slug] => daya-nueva [term_group] => 0 [term_taxonomy_id] => 336 [taxonomy] => building_city [description] => [parent] => 0 [count] => 1 [filter] => raw ) [4] => WP_Term Object ( [term_id] => 340 [name] => Jávea [slug] => javea [term_group] => 0 [term_taxonomy_id] => 337 [taxonomy] => building_city [description] => [parent] => 0 [count] => 1 [filter] => raw ) [11] => WP_Term Object ( [term_id] => 327 [name] => Альгорфа [slug] => algorfa [term_group] => 0 [term_taxonomy_id] => 324 [taxonomy] => building_city [description] => [parent] => 0 [count] => 2 [filter] => raw ) [29] => WP_Term Object ( [term_id] => 133 [name] => Бенихофар [slug] => benihofar [term_group] => 0 [term_taxonomy_id] => 133 [taxonomy] => building_city [description] => [parent] => 0 [count] => 7 [filter] => raw ) [37] => WP_Term Object ( [term_id] => 328 [name] => Виллахойоса [slug] => villahojosa [term_group] => 0 [term_taxonomy_id] => 325 [taxonomy] => building_city [description] => [parent] => 0 [count] => 2 [filter] => raw ) [44] => WP_Term Object ( [term_id] => 318 [name] => Гвардамар-дель-Сегура [slug] => gvardamar-del-segura [term_group] => 0 [term_taxonomy_id] => 318 [taxonomy] => building_city [description] => [parent] => 0 [count] => 8 [filter] => raw ) [87] => WP_Term Object ( [term_id] => 212 [name] => Лос Алькасарес [slug] => los-alkasares [term_group] => 0 [term_taxonomy_id] => 212 [taxonomy] => building_city [description] => [parent] => 0 [count] => 4 [filter] => raw ) [92] => WP_Term Object ( [term_id] => 218 [name] => Лос-Монтесинос [slug] => los-montesinos [term_group] => 0 [term_taxonomy_id] => 218 [taxonomy] => building_city [description] => [parent] => 0 [count] => 1 [filter] => raw ) [110] => WP_Term Object ( [term_id] => 317 [name] => Ориуэла [slug] => oriujela [term_group] => 0 [term_taxonomy_id] => 317 [taxonomy] => building_city [description] => [parent] => 0 [count] => 44 [filter] => raw ) [117] => WP_Term Object ( [term_id] => 248 [name] => Пилар Де Ла Орадада [slug] => pilar-de-la-oradada [term_group] => 0 [term_taxonomy_id] => 248 [taxonomy] => building_city [description] => [parent] => 0 [count] => 15 [filter] => raw ) [128] => WP_Term Object ( [term_id] => 262 [name] => Рохалес [slug] => rohales [term_group] => 0 [term_taxonomy_id] => 262 [taxonomy] => building_city [description] => [parent] => 0 [count] => 10 [filter] => raw ) [137] => WP_Term Object ( [term_id] => 341 [name] => Сан-Мигель-дэ-Салинас [slug] => san-migel-dje-salinas [term_group] => 0 [term_taxonomy_id] => 338 [taxonomy] => building_city [description] => [parent] => 0 [count] => 3 [filter] => raw ) [139] => WP_Term Object ( [term_id] => 272 [name] => Сан-Педро-дель-Пинатар [slug] => san-pedro-del-pinatar [term_group] => 0 [term_taxonomy_id] => 272 [taxonomy] => building_city [description] => [parent] => 0 [count] => 6 [filter] => raw ) [144] => WP_Term Object ( [term_id] => 277 [name] => Сан-Хавьер [slug] => san-haver [term_group] => 0 [term_taxonomy_id] => 277 [taxonomy] => building_city [description] => [parent] => 0 [count] => 2 [filter] => raw ) [145] => WP_Term Object ( [term_id] => 278 [name] => Санта Пола [slug] => santa-pola [term_group] => 0 [term_taxonomy_id] => 278 [taxonomy] => building_city [description] => [parent] => 0 [count] => 7 [filter] => raw ) [155] => WP_Term Object ( [term_id] => 290 [name] => Торревьеха [slug] => torreveha [term_group] => 0 [term_taxonomy_id] => 290 [taxonomy] => building_city [description] => [parent] => 0 [count] => 46 [filter] => raw ) [161] => WP_Term Object ( [term_id] => 299 [name] => Финестрат [slug] => finestrat [term_group] => 0 [term_taxonomy_id] => 299 [taxonomy] => building_city [description] => [parent] => 0 [count] => 5 [filter] => raw ) [168] => WP_Term Object ( [term_id] => 326 [name] => Эльче [slug] => jelche [term_group] => 0 [term_taxonomy_id] => 323 [taxonomy] => building_city [description] => [parent] => 0 [count] => 10 [filter] => raw ) )
    посравнивать значения с адресной строкой и если [slug] совпадает со слагом в адресе, то вывести [name]?
    UPD. Или ваш код этим и занимается...я прочитал его уже много раз и с каждым разом приходит новое осмысление?

    Я просто оч повехностен в php и с массивами не справлюсь, но если предоставляется возможность люблю поковыраться, а не тупо копипастить, и набраться немного знаний :)
     
    Последнее редактирование: 14 янв 2019
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.600
    Симпатии:
    1.510
    именно это он и делает )
     
  5. Iga

    Iga

    Регистр.:
    12 янв 2014
    Сообщения:
    333
    Симпатии:
    53
    Всё бы хорошо, но не работает у меня...

    разбираю для себя по-кусочкам:
    Код:
    $parsedUrl = parse_url($_SERVER['REQUEST_URI']);
    echo $parsedUrl['query']; //fwp_city_facet=torreveha
    Код:
    $parsedQuery = parse_str($parsedUrl['query']);
    echo $fwp_city_facet; //torreveha
    а дальше не соображу, почему $citySlug ничего не возвращает?

    $terms у меня не выводит массива :(
     
    Последнее редактирование: 15 янв 2019
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.600
    Симпатии:
    1.510
    в моем коде замени
    PHP:
    $terms get_terms( ['taxonomy']);
    на свой
    PHP:
    $params = array(
    'taxonomy' => 'building_city',
    'hide_empty' => true,
    );
    $terms get_terms$params );
    по идее, этого будет достаточно
     
  7. Iga

    Iga

    Регистр.:
    12 янв 2014
    Сообщения:
    333
    Симпатии:
    53
    Да конечно заменял и array( 'taxonomy' => 'building_city', 'hide_empty' => true); тоже пробовал по аналогии со своими экспериментами.
    Пусто в <?php echo getCityName(); ?>

    Вот весь код
    PHP:
    function getCityName() {
        
    $parsedUrl parse_url($_SERVER['REQUEST_URI']);
        if (isset(
    $parsedUrl['query']) === false) {
            return 
    false;
        }
        
    $parsedQuery parse_str($parsedUrl['query']);
        if (isset(
    $parsedQuery['fwp_city_facet']) === false) {
            return 
    false;
        }
        
    $citySlug $parsedQuery['fwp_city_facet'];
        
    $params = array(
            
    'taxonomy' => 'building_city',
            
    'hide_empty' => true,
            );
            
    $terms get_terms$params );
        foreach (
    $terms as $term) {
            if (
    $term['slug'] == $citySlug) {
                return 
    $term['name'];
            }
        }
    }
     
  8. Iga

    Iga

    Регистр.:
    12 янв 2014
    Сообщения:
    333
    Симпатии:
    53
    Вот так вот заработало
    PHP:
    function getCityName() {
        
    $parsedUrl parse_url($_SERVER['REQUEST_URI']);
        if (isset(
    $parsedUrl['query']) === false) {
            return 
    'нет строки';
        }
        
    $parsedQuery parse_str($parsedUrl['query']);
        if (
    $fwp_city_facet == false) {
            echo 
    'нет слага';
        }
        
    $params = array(
            
    'taxonomy' => 'building_city',
            
    'hide_empty' => true,
            );
            
    $terms get_terms$params );
        foreach (
    $terms as $term) {
            if (
    $term->slug == $fwp_city_facet) {
                return 
    $term->name;
            }
        }
    }