Когда комментарий хранится в базе данных WordPress, идентификатор сообщения (или страницы), к которому относится комментарий, также сохраняется.
Проблема в том, что вы пытаетесь сохранить комментарии, используя WordPress, но для страницы, которая на самом деле не знает о.
Итак, как насчет того, чтобы создать WordPress страницу для каждой реальной страницы, но просто как представление , чтобы ваши реальные страницы и WordPress имели общий язык для работы друг с другом.
Итак, план здесь:
- Загрузка WordPress в фоновом режиме на каждую из «настоящих» страниц.
- Проверьте, существует ли представление страницы WordPress для «реальной» страницы
- Если этого не произойдет, создайте его, тогда и там
- Обманите WordPress, заставив думать, что мы на самом деле видим представление
- Продолжайте использовать все функции WP и «шаблонные теги», как обычно
Этот код должен находиться где-то в начале файла шаблона, используемого для отображения ваших «настоящих» страниц;
include ('../path/to/wp-load.php');
// remove query string from request
$request = preg_replace('#\?.*$#', '', $_SERVER['REQUEST_URI']);
// try and get the page name from the URI
preg_match('#podpages/([a-z0-9_-]+)#', $matches);
if ($matches && isset($matches[1])) {
$pagename = $matches[1];
// try and find the WP representation page
$query = new WP_Query(array('pagename' => $pagename));
if (!$query->have_posts()) {
// no WP page exists yet, so create one
$id = wp_insert_post(array(
'post_title' => $pagename,
'post_type' => 'page',
'post_status' => 'publish',
'post_name' => $pagename
));
if (!$id)
do_something(); // something went wrong
}
// this sets up the main WordPress query
// from now on, WordPress thinks you're viewing the representation page
}
UPDATE
Не могу поверить, что я был таким глупым. Ниже следует заменить текущий код внутри внешнего if
;
// try and find the WP representation page - post_type IS required
$query = new WP_Query(array('name' => $pagename, 'post_type' => 'page'));
if (!$query->have_posts()) {
// no WP page exists yet, so create one
$id = wp_insert_post(array(
'post_title' => $pagename,
'post_type' => 'page',
'post_status' => 'publish',
'post_name' => $pagename,
'post_author' => 1, // failsafe
'post_content' => 'wp_insert_post needs content to complete'
));
}
// this sets up the main WordPress query
// from now on, WordPress thinks you're viewing the representation page
// post_type is a must!
wp(array('name' => $pagename, 'post_type' => 'page'));
// set up post
the_post();
P.S Я думаю, что использование query_var name
вместо pagename
лучше подходит - он запрашивает слаг, а не слаг «path».
Вам также нужно будет либо поместить ввод в форму с именем redirect_to
и значением URL-адреса, на который вы хотите перенаправить, или , отфильтровать перенаправление с подключенной функцией на comment_post_redirect
, возвращая правильный URL.