Поддержка Проблемы и решения Комментарии от записи ко всем записям/страницам.

  • Если я убираю галку с чекбокса записи или страницы о разрешении оставлять комментарии, то у этих записей/страниц форма отправки комментария все-равно остается.
    НО. если оставить коммент, то он оставляется первой записе в таблице order by id.
    Отображение комментариев по такому же принципу.
    С чем это может быть связано и как это вылечить?
    тема wsc6

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Предполагаю, что в теме отсутствует проверка на запрет комментариев.

    Нет, дело не в теме.
    Попробовал ряд других — проблема сохранилась

    Проблема крылась в другом.
    Область комментирования отображается только в том случае, если в записи или старнице содержится мой код:

    <?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>';
    }}}
    ?>

    Какая из вызываемых функций может дать такой эффект?

    Модератор Yuri

    (@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 в конце кода.

    Модератор Yuri

    (@yube)

    Тоже вариант. Хотя более кошерным было бы вообще не использовать в своем скрипте зарезервированные переменные, а в случае необходимости использования — сохранять значения в начале скрипта и вертать взад в конце.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Решил обнулением $post в конце кода.

    Можно также использовать функцию wp_reset_postdata().

    Ну, я пока учусь..)
    Сергей, wp_reset_postdata() сейчас попробовал — не то.
    Я значения $post в коде никак не изменял. wp_reset_postdata() приводит массив в вид, как только что вызванного. А мне как раз от этого надо было избавиться.
    Но все-равно спасибо, функцию себе в заметочки внесу.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    wp_reset_query() — ещё одна полезная функция 🙂

    почитал про нее — и правда, полезная)

    Модератор Yuri

    (@yube)

    Я значения $post в коде никак не изменял.

    Шутить изволите? foreach( $myposts as $post ) — это тогда что?

    Ох, Вы правы, я такой шутник:-)
    Признаю ошибку, спасибо

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Комментарии от записи ко всем записям/страницам.» закрыта для новых ответов.