Вставка динамического контента на страницу

18 апр. 2015 г., 09:39:39
Просмотры: 28.6K
Голосов: 5

Я вижу, что эта тема поднимается регулярно, но пока не нашел ответа на свой конкретный запрос.

Я пытаюсь использовать страницу WordPress как шаблон и вставлять контент из базы данных (около 20 текстовых полей, включая имена файлов изображений) на основе ID, переданного в качестве параметра URL (и индекса моей базы данных). Например: www.example.com/examplepage/?pid=123

До WordPress я мог легко сделать это на PHP, выполнив код для получения записи из базы данных, а затем вывести HTML с этими полями.

У меня есть плагин в WordPress, который позволяет выполнять PHP-код на странице, но это происходит в теле страницы, и я полагаю, что заголовок к этому моменту уже выведен. В заголовке есть поля, такие как title и meta desc, которые я хотел бы заполнять динамическим контентом.

Я видел плагины для CMS-подобного управления списками недвижимости, фильмов и т.д., но работа с моей базой данных немного необычна, поэтому мне нужно использовать индивидуальный подход.

Я понимаю, что может потребоваться внести изменения в файл functions.php моей темы, чтобы углубиться в процесс рендеринга страниц WordPress, но я хочу быть осторожным, чтобы не нарушить работу остальных страниц/постов на моем сайте. Это должна быть всего одна специальная страница, которая будет принимать параметры и загружать соответствующий контент.

Буду признателен за советы о необходимых шагах.

3
Комментарии

Итак, ваш вопрос заключается в том, как установить или изменить title и мета-теги для шаблона страницы?

cybmeta cybmeta
18 апр. 2015 г. 11:32:38

Не только title и мета-теги, но и наполнение контентом тела страницы. Всё на основе данных, полученных из одного запроса к БД с поиском по pid.

Warren Vick Warren Vick
18 апр. 2015 г. 11:39:42

Вы сказали, что уже знаете, как наполнять контент с помощью PHP - ничто не мешает вам включить этот PHP-код в шаблон страницы.

cybmeta cybmeta
18 апр. 2015 г. 11:50:15
Все ответы на вопрос 3
7

При создании шаблона страницы вы можете вставлять в его содержимое что угодно и использовать любые PHP-фрагменты. Таким образом, вы можете продолжать работать так же, как и в обычном PHP. Например, ваш шаблон страницы может выглядеть так:

<?php
/*
Template Name: Мой шаблон
*/
get_header();

?>
<main>

    <?php

    if( isset( $_GET['pid'] ) ) {

        // Добавьте ваш динамический контент здесь

    }

    ?>


</main>
<?php get_footer(); ?>

Вы правы насчёт заголовка и мета-тегов документа — они могут быть уже установлены. В этом случае вам нужно использовать фильтр wp_title и действие wp_head, а также функцию is_page_template для проверки, используется ли шаблон страницы.

Например, предположим, что ваш файл шаблона называется page-mytemplate.php и находится в корневой папке вашей темы:

add_filter( 'wp_title', function( $title, $sep ) {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Измените $title здесь
        $title = 'Мой новый заголовок';

    }

    return $title;

}, 10, 2 );

add_action( 'wp_head', function() {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Добавьте/выведите ваши мета-теги здесь
        echo '<meta name=....>';

    }

} );

Проблема

Существует серьёзная проблема с мета-тегами. В WordPress нет стандартного способа управления мета-тегами документа. Если вы используете плагин, который добавляет мета-теги, вы не сможете их переопределить, если только плагин не предоставляет такую возможность.

Ссылки

18 апр. 2015 г. 11:42:02
Комментарии

Спасибо за это. Я нашел информацию о шаблонах страниц WordPress и попробую это. Что касается ваших заметок о тегах <meta>, подозреваю, что мой плагин Yoast может помешать. Я бы поставил Vote++, но я новичок и пока не имею права голосовать!

Warren Vick Warren Vick
18 апр. 2015 г. 15:00:59

Извините, но я вас не понимаю. Вы сказали, что используете шаблон страницы, поэтому я предположил, что вы знаете, как его создать; я не понимаю, что вы сейчас говорите о ссылке на шаблоны страниц. Думаю, я ответил именно на ваш вопрос, поэтому считаю, что мой ответ должен быть помечен как принятый; если нет, пожалуйста, объясните, почему этот ответ не решает вашу проблему. Кстати: вашей текущей репутации достаточно для принятия ответов.

cybmeta cybmeta
18 апр. 2015 г. 16:59:06

Возможно, я вас неправильно понял. Вы сказали "используйте страницу WordPress как шаблон", и я подумал, что вы имеете в виду шаблоны страниц WordPress; поэтому я начал ответ со слов "Так как вы создаете шаблон страницы".

cybmeta cybmeta
18 апр. 2015 г. 17:35:11

Извините... я новичок на StackExchange и предположил, что голосование — это знак одобрения. Теперь я нашёл галочку/отметку. Вы правы, что я использовал слово "шаблон" в общем смысле в своём вопросе, но теперь я понимаю, что лучший путь для меня — использовать "Специализированный шаблон страницы" в WordPress, который работает для конкретной страницы. Я легко могу встроить свою работу с базой данных PHP туда. Было бы удобно сохранить дизайн макета на странице и вставить поля из базы данных... Подозреваю, что шорткоды могут быть здесь полезны? Ещё раз спасибо за развёрнутый ответ.

Warren Vick Warren Vick
20 апр. 2015 г. 19:59:38

Поскольку шаблон страницы — это PHP-файл, вы можете строить его как угодно. С шорткодами или без них. Используйте шорткоды, если хотите выводить информацию где-то ещё, а не только в шаблоне страницы. То есть вы можете использовать PHP-функцию в шаблоне страницы и ту же функцию в качестве callback для шорткода; но шорткоды вообще не обязательны для шаблона страницы. Здесь вы можете увидеть, что шорткод — это просто placeholder для PHP-функции и как их можно использовать отдельно.

cybmeta cybmeta
20 апр. 2015 г. 20:16:56

Спасибо, cybmeta. У меня получилось настроить пользовательский шаблон, и я решил реализовать макет страницы в самой странице. Шорткоды оказались удобным способом настройки полей из базы данных/расчётных полей и их размещения в контенте страницы. Единственная проблема — установка заголовка страницы и мета-описания с помощью add_filter(). Я использую Genesis и подозреваю, что SEO-элементы мешают. Я задам об этом вопрос в другом посте.

Warren Vick Warren Vick
24 апр. 2015 г. 14:34:38

Я обновил ответ, код был неверным. Теперь он должен работать (я протестировал и использую похожий код на нескольких сайтах). К сожалению, я не могу помочь вам с Genesis, так как это стороннее программное обеспечение, с которым я не знаком; попробуйте протестировать код без Genesis, чтобы понять, связана ли проблема с конфликтом с Genesis или нет.

cybmeta cybmeta
24 апр. 2015 г. 15:00:06
Показать остальные 2 комментариев
1

Возможно, я что-то упускаю, но:

Если вам нужен только 'pid', например, и он является частью URL, то это довольно просто?

В шаблоне страницы 'examplepage' просто сделайте:

$mypid = $_GET['pid'];

а затем продолжите SQL-запрос на основе этого значения и выведите ответ.

Если вам нужно что-то более AJAX-ориентированное, то когда пользователь заходит на 'examplepage', возьмите 'pid' и добавьте его как класс или data-атрибут в пустой div. Например, назовите его 'results-container':

<?php $mypid = $_GET['pid']; ?>
<div class"results-container" mypid="<?php echo $mypid; ?>"></div>

Затем добавьте JS-скрипт, который выполняется при готовности документа, читает атрибут mypid этого div и выполняет отдельный fetch. Таким образом, страница может загрузиться и показать статус "загрузки" и предварительный контент, пока результаты подгружаются.

Надеюсь, это понятно.

- Написано толстыми пальцами на мобильном телефоне! Аааа.

18 апр. 2015 г. 10:01:26
Комментарии

Если бы динамический контент был только в теле страницы, то вы были бы правы, этого было бы достаточно. Но мне также нужно переопределить элементы в заголовке, такие как заголовок страницы и мета-описание.

Warren Vick Warren Vick
18 апр. 2015 г. 11:27:28
0

Я сам недавно делал это. Возможно, мой ответ запоздал, но если кто-то еще захочет узнать как, вот шаги, которые я выполнил в среде WordPress:

  1. Создайте функцию, которая читает параметр URL, например:

    function details_Page($atts)
      {
      global $wpdb; 
    
    
     // Получаем запись из базы данных для этой детальной страницы
     $DatabaseId = $_GET['pid'];
     if(!is_numeric ($DatabaseId))
       {
       // ПЕРЕХОД НА СТРАНИЦУ "СТРАНИЦА НЕ НАЙДЕНА", ЕСЛИ ID НЕВАЛИДНЫЙ
       header('Location: /missing-page/');  
      return;
      }
    
     ГЕНЕРИРУЙТЕ ВАШ КОД СТРАНИЦЫ ЗДЕСЬ
    }
    

Теперь создайте шорткод для этой функции или используйте ее в шаблоне страницы. По сути, это еще один способ создания шаблона страницы.

add_shortcode('DETAILS_PAGE', 'details_Page');

Теперь добавьте шорткод на специально созданную страницу (или в шаблон).

Чтобы изменить заголовок в соответствии с вашими данными, убедитесь, что вызов add_action находится в основном цикле или в functions.php. Иначе может возникнуть состояние гонки.

add_action( 'wp_head', 'MMD_listings_add_custom_meta', 10 );
function add_custom_meta()
    {
   $slug = basename(get_permalink());  // Я использую для конкретной страницы
   if(  $slug == 'details')
      {
     $Name = $_GET[ 'Name' ];
     $Desc = $_GET[ 'Desc' ];
     $Logo = $_GET[ 'Logo' ];
    ?>   
    <meta content="<?php echo $Name; ?>>"/>
    <meta content="<?php echo $Desc; ?>">
   <?PHP
   }
 }
9 июн. 2019 г. 03:13:56