red
  • 0
Новичок

Отображать номер поста, а не идентификатор поста

  • 0

Я хочу отобразить порядок номеров сообщений. Я пытался использовать <?php the_ID(); ?>, но это просто отображает идентификатор сообщения и, похоже, не идет в последовательном порядке из-за изменений сообщения и многого другого.

Есть ли способ показать, является ли сообщение № 2, № 3 или № 4 и так далее?

Спасибо!

Share
  1. Идентификаторы сообщений не должны быть последовательными. Чтобы последовательно пронумеровать ваши сообщения, вам придется использовать метаполе. Было обсуждение этого, когда мы возвращались к этому вопросу:

    Изменить структуру постоянных ссылок на порядковый номер для каждого сообщения?

    И лучшим ответом на то, что вы хотите сделать, был фрагмент кода, размещенный на форумах поддержки:

    http://wordpress.org/support/topic/display-sequential-post-numbercount-not-post-id

    function updateNumbers() {
        /* numbering the published posts, starting with 1 for oldest;
        / creates and updates custom field 'incr_number';
        / to show in post (within the loop) use <?php echo get_post_meta($post->ID,'incr_number',true); ?>
        / alchymyth 2010 */
        global $wpdb;
        $querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts 
                     WHERE $wpdb->posts.post_status = 'publish' 
                     AND $wpdb->posts.post_type = 'post' 
                     ORDER BY $wpdb->posts.post_date ASC";
        $pageposts = $wpdb->get_results($querystr, OBJECT);
        $counts = 0 ;
        if ($pageposts):
        foreach ($pageposts as $post):
            $counts++;
            add_post_meta($post->ID, 'incr_number', $counts, true);
            update_post_meta($post->ID, 'incr_number', $counts);
        endforeach;
    endif;
    }  
    
    add_action ( 'publish_post', 'updateNumbers', 11 );
    add_action ( 'deleted_post', 'updateNumbers' );
    add_action ( 'edit_post', 'updateNumbers' );
    

    (Я немного изменил его, чтобы отсортировать по дате публикации, а не только по идентификатору, как это было в исходном коде.)

    Он будет подключаться ко всем действиям с сообщениями (сохранение/публикация/удаление) и обновлять настраиваемое поле «incr_number» для всех сообщений. Таким образом, у вас будет отставание в производительности при сохранении сообщений, когда у вас есть большое количество сообщений в базе данных, но как только сообщения будут сохранены, показать число так же просто, как

    echo get_post_meta( $post->ID, 'incr_number', true );
    
    • 0
    • У меня есть вопрос по этому поводу: ( цитата ) «Числа будут обновляться каждый раз, когда сообщение удаляется, редактируется или публикуется. Например, если вы удаляете сообщение или устанавливаете его как черновик, максимальное число уменьшится на 1, а остальные посты будут перенумерованы. Поэтому это не пожизненный номер поста, а отражает номера всех опубликованных постов.» — Решает ли удаление add_action ( 'deleted_post', 'updateNumbers' ); из кода проблему перенумерации? (Мне нужны постоянные номера для всех сообщений, которые не изменятся после установки)

      • 0
    • Если вы хотите, чтобы номера ваших сообщений оставались постоянными на всю жизнь, почему бы просто не использовать идентификаторы сообщений? Кажется, они для этого…

      • 0

Оставить ответ

You must login to add an answer.