d-b
  • 0
Новичок

Изменить порядок страниц по пользовательскому полю (магические поля)

  • 0

Мой код перечисляет дочерние страницы, упорядоченные по заголовку сообщения, вытягивая первое вложение изображения дочернего сообщения в качестве миниатюры.

Дочерние страницы содержат настраиваемые поля, созданные с помощью плагина Magic Fields.

Может ли кто-нибудь помочь мне настроить мой код, чтобы мои страницы отображались в порядке убывания настраиваемого поля под названием «цена»?

Это мой код:

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="page" id="post-<?php the_ID(); ?>">

            <div class="pagecontent">


            <?php $child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = 'page' ORDER BY post_title", 'OBJECT');   ?>


<?php if ( $child_pages ) : foreach ( $child_pages as $pageChild ) : setup_postdata( $pageChild ); ?>

<div class="grid"><a href="<?php echo  get_permalink($pageChild->ID); ?>" alt="<?php echo $pageChild->post_title; ?>" title="<?php echo $pageChild->post_title; ?>">
<?php $attachments = get_children( array(
                'post_parent'    => $pageChild->ID,
                'post_type'      => 'attachment',
                'numberposts'    => 1, // show all -1
                'post_status'    => 'inherit',
                'post_mime_type' => 'image',
                'order'          => 'ASC',
                'orderby'        => 'menu_order ASC'
                ) );
foreach ( $attachments as $attachment_id => $attachment ) {
    echo wp_get_attachment_image( $attachment_id, 'medium' );
} ?>
</a>

<h1><a href="<?php echo  get_permalink($pageChild->ID); ?>" title="<?php echo $pageChild->post_title; ?>"><?php echo $pageChild->post_title; ?></a></h1>
</div>

<?php endforeach; endif; ?>      

            </div>
        </div>

        <?php endwhile; endif; ?>

Буду признателен за любую помощь!

Спасибо.

Share
  1. Я протестировал этот код, и он отлично работает:

    <?php query_posts('meta_key=price&orderby=meta_value_num&post_parent='.$post->ID.'&post_type=page'); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
        <div class="page" id="post-<?php the_ID(); ?>">
            <div class="pagecontent">
                <div class="grid">
                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                        <?php
                            $attachments = get_children( array (
                                'post_parent'    => $post->ID,
                                'post_type'      => 'attachment',
                                'numberposts'    => 1,
                                'post_status'    => 'inherit',
                                'post_mime_type' => 'image',
                                'order'          => 'ASC',
                                'orderby'        => 'menu_order ASC'
                            ) );
    
                            foreach ( $attachments as $attachment_id => $attachment ) {
                                echo wp_get_attachment_image( $attachment_id, 'medium' );
                            }
                        ?>
                    </a>
                    <h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
                </div> <!-- // grid -->
            </div> <!-- // pagecontent -->
        </div> <!-- // page -->
    
    <?php endwhile; endif; ?>
    

    Пара замечаний:

    • На самом деле вам не нужно использовать get_results . Я объединил ваши пользовательские ограничения запросов с query_posts вызовом вверху
    • Вызов query_posts упорядочивается по meta_value_num, что идеально подходит для сортировки по номерам. Если ваше поле «цена» представляет собой строку, замените ее meta_value_num на meta_value .
    • Этот запрос будет возвращать только сообщения, в которых определено поле «цена». То есть, если ваше поле цены для поста пусто, этот пост не будет возвращен.
    • 0

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

You must login to add an answer.