Как отсортировать по настраиваемому полю, не создавая новую страницу вручную? - PullRequest
1 голос
/ 12 января 2011

Здесь есть небольшая проблема с Wordpress. Честно говоря, я всегда разрабатывал свои сайты с нуля и «кодировал» с нуля. В последнее время я пытался работать с WP, так как слышал об этом много хорошего.

Похоже, что WP дает вам много вещей бесплатно (например, динамические "страницы" на основе КАТЕГОРИЙ). Тем не менее, я хотел бы знать, как манипулировать этими халявами, не изобретая велосипед. Например, я бы хотел, чтобы в моем SUB-MENU отображался список категорий сообщений. Но я бы хотел отсортировать эти категории по ПОЛЬЗОВАТЕЛЬСКОМУ ПОЛЕ.

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

Любой вклад будет наиболее ценным.

Best.

1 Ответ

1 голос
/ 19 января 2011

В верхней части шаблона category.php в корневом каталоге вашей темы добавьте следующее, чтобы добавить свое настраиваемое поле сортировки в запрос:

<?php
function is_valid_custom_sort_field($field)
{
    // implementation left as an exercise for the questioner
    return true;
}
if ($_REQUEST['sort_custom_field'] && is_valid_custom_sort_field($_REQUEST['sort_custom_field'])) {
    query_posts($query_string . '&orderby='.$_REQUEST['sort_custom_field']);
}

См: http://codex.wordpress.org/Function_Reference/query_posts

Если ваша тема не имеет category.php, вот простой шаблон по умолчанию, на котором она будет основана (скопировано из двадцатой темы):

<?php
/**
 * The template for displaying Category Archive pages.
 */

get_header(); ?>

        <div id="container">
            <div id="content" role="main">

                <h1 class="page-title"><?php
                    printf( __( 'Category Archives: %s', 'twentyten' ), '<span>' . single_cat_title( '', false ) . '</span>' );
                ?></h1>
                <?php
                    $category_description = category_description();
                    if ( ! empty( $category_description ) )
                        echo '<div class="archive-meta">' . $category_description . '</div>';

                /* Run the loop for the category page to output the posts.
                 * If you want to overload this in a child theme then include a file
                 * called loop-category.php and that will be used instead.
                 */
                get_template_part( 'loop', 'category' );
                ?>

            </div><!-- #content -->
        </div><!-- #container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
...