Предполагаю, что в теме отсутствует проверка на запрет комментариев.
Нет, дело не в теме.
Попробовал ряд других — проблема сохранилась
Проблема крылась в другом.
Область комментирования отображается только в том случае, если в записи или старнице содержится мой код:
<?php
global $post;
$today = getdate();
if (strlen($today[mon])==1) {
$today[mon] = '0'.$today[mon];
}
if (strlen($today[mday])==1) {
$today[mday] = '0'.$today[mday];
}
$now_date = $today[mday].'-'.$today[mon].'-'.$today[year].' 00:00';
echo $now_date.'<br>';
$args = array( 'numberposts' => -1, 'category' => 1 );
$myposts = get_posts($args);
foreach( $myposts as $post ) : setup_postdata($post);
$post_id_date[] = get_the_id();
$post_id_link[] = get_permalink();
$post_id_title[] = get_the_title();
endforeach;
echo '<br><br>';
$arr_count = count($post_id_date);
for ($i=0; $i <= $arr_count - 1; $i++) {
$custom_fields = get_post_custom($post_id_date[$i]);
$my_custom_field = $custom_fields['Дата события'];
$event_date = $my_custom_field[0];
if ($event_date) {
$date1 = $now_date;
$date2 = $event_date;
$arr1 = explode(" ", $date1);
$arr2 = explode(" ", $date2);
$arrdate1 = explode("-", $arr1[0]);
$arrdate2 = explode("-", $arr2[0]);
$arrtime1 = explode(":", $arr1[1]);
$arrtime2 = explode(":", $arr2[1]);
$timestamp2 = (mktime($arrtime2[0], $arrtime2[1], 0, $arrdate2[1], $arrdate2[0], $arrdate2[2]));
$timestamp1 = (mktime($arrtime1[0], $arrtime1[1], 0, $arrdate1[1], $arrdate1[0], $arrdate1[2]));
$difference = floor(($timestamp2 - $timestamp1)/86400);
if ($timestamp2 > $timestamp1) {
echo '<a href="'.$post_id_link[$i].'">'.$post_id_title[$i].'</a>';
echo ' / осталось дней: '.$difference.' /<br>';
}}}
?>
Какая из вызываемых функций может дать такой эффект?
Модератор
Юрій
(@yube)
если в записи или старнице содержится мой код:
В записи или в шаблоне записи? Есть разница, знаете ли.
Какая из вызываемых функций может дать такой эффект?
Комментарии обычно выводятся функцией comments_template(), которая полагает, что её вызвали в сингулярном шаблоне, и что на момент вызова в глобальной переменной $post содержится выводимая запись. Если в $post подсунуть что-то другое, то функция будет работать с тем, что подсунули.
В записи или в шаблоне записи? Есть разница, знаете ли.
непосредственно в теле записи.
такс… в global $post есть [comment_status] => open.
если правильно понял, то нужно сменить значение на close.
Тогда прошу рассказать, как изменить значение в глобальном массиве.
$post[comment_status] = 'close';
как и ожидалось — не помогло.
Fatal error: Cannot use object of type stdClass as array in C:\AppServ\www\ee\wp-content\plugins\exec-php\includes\runtime.php(42) : eval()’d code on line 3
3 строка — $post[comment_status] = ‘close’;
Юрий, очередное огромное спасибо за помощь!
Решил обнулением $post в конце кода.
Модератор
Юрій
(@yube)
Тоже вариант. Хотя более кошерным было бы вообще не использовать в своем скрипте зарезервированные переменные, а в случае необходимости использования — сохранять значения в начале скрипта и вертать взад в конце.
Решил обнулением $post в конце кода.
Можно также использовать функцию wp_reset_postdata()
.
Ну, я пока учусь..)
Сергей, wp_reset_postdata() сейчас попробовал — не то.
Я значения $post в коде никак не изменял. wp_reset_postdata() приводит массив в вид, как только что вызванного. А мне как раз от этого надо было избавиться.
Но все-равно спасибо, функцию себе в заметочки внесу.
wp_reset_query()
— ещё одна полезная функция 🙂
почитал про нее — и правда, полезная)
Модератор
Юрій
(@yube)
Я значения $post в коде никак не изменял.
Шутить изволите? foreach( $myposts as $post ) — это тогда что?
Ох, Вы правы, я такой шутник:-)
Признаю ошибку, спасибо