janochen
  • 0
Мастер

Можно ли дать пользователю возможность выбирать между двумя отдельными файлами шаблонов для использования в сообщении?

  • 0

По сути, я хочу позволить пользователю выбирать, какие файлы шаблонов он или она хочет использовать в сообщении:

одиночный asc.php :

<?php $custom_posts = new WP_Query(); ?>
            <?php $custom_posts->query('post_type=bbp_topic&order=ASC'); ?>
            <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
                <div class="content-block-2">
                    <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
                </div>
            <?php endwhile; ?>

одиночный-desc.php :

        <?php $custom_posts = new WP_Query(); ?>
        <?php $custom_posts->query('post_type=bbp_topic&order=DESC'); ?>
        <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
            <div class="content-block-2">
                <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
            </div>
        <?php endwhile; ?>

В этом примере пользователь может выбрать (возможно, щелкнув ссылку), чтобы просмотреть сообщение с файлом шаблона single-asc.php или single-desc.php файлом шаблона.

(пример ASC и DESC приведен только для справки, эти два шаблона будут иметь разный код)

Любые предложения для достижения этого?

Share
  1. Под «пользователем» вы подразумеваете автора сообщения или посетителя, просматривающего страницу?

    • 0
  2. Если различия на страницах — это просто аргументы запроса, вы можете добавить переменные запроса и использовать их в одном и том же шаблоне:

    //add your arguments to query vars
    add_filter('query_vars', 'my_query_vars');
    
    function my_query_vars($vars) {
        // add my_sortand ptype to the valid list of variables you can add as many as you want
        $new_vars = array('my_sort','ptype');
        $vars = $new_vars + $vars;
        return $vars;
    }
    

    ваш запрос должен выглядеть так:

    <?php $custom_posts = new WP_Query(); ?>
    <?php $custom_posts->query(array('post_type' => get_query_var('ptype'), 'order' => get_query_var('my_sort'))); ?>
    <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
        <div class="content-block-2">
            <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
        </div>
    <?php endwhile; ?>
    

    и ваши ссылки для пользователя должны быть:

    • ASC: URL + ?ptype=bbp_topic&my_sort=ASC
    • DESC: URL + ?ptype=bbp_topic&my_sort=DESC

    Теперь, если ваши различия в страницах больше, чем аргументы запроса, вы можете изменить страницу шаблона с помощью template_redirect хука:

    так же, как и раньше, добавьте аргумент запроса

       //add your arguments to query vars
        add_filter('query_vars', 'my_query_vars');
    
        function my_query_vars($vars) {
            // add my_sort to the valid list of variables 
            $new_vars = array('my_sort');
            $vars = $new_vars + $vars;
            return $vars;
        }
    

    затем добавьте функцию в хук template_redirect и создайте перенаправление на основе этого аргумента:

    add_action("template_redirect", 'sort_template_redirect');
    // Template selection
    function sort_template_redirect()
    {
        global $wp;
        global $wp_query;
        if (isset($wp->query_vars["my_sort"]))
        {
            // Let's look for the template file in the current theme
            if (array_key_exists('my_sort', $wp->query_vars) && $wp->query_vars['my_sort'] == 'ASC'){
                include(TEMPLATEPATH . '/single-asc.php');
                die();
            }
            if (array_key_exists('my_sort', $wp->query_vars) && $wp->query_vars['my_sort'] == 'DESC'){
                include(TEMPLATEPATH . '/single-desc.php:');
                die();
            }
        }
    }
    

    и еще раз вам нужно будет добавить аргументы к ссылке так:

    • ASC: URL + ?my_sort=ASC
    • DESC: URL + ?my_sort=DESC
    • 0

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

You must login to add an answer.