rodeoramsey
  • 0
Учитель

Загрузить публикацию с другим шаблоном?

  • 0

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

Спасибо!

Share
  1. вы можете сделать это следующим образом:

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

    затем добавьте перенаправление шаблона на основе этого query_var:

    add_action("template_redirect", 'my_template_redirect_2322');
    
    // Template selection
    function my_template_redirect_2322()
    {
        global $wp;
        global $wp_query;
        if (isset($wp->query_vars["my_print"]))
        {
            include(TEMPLATEPATH . '/my_print_themplate.php');
            die();
    
        }
    }
    

    создайте новый файл в каталоге вашей темы с именем «my_print_themplate.php» и вставьте туда этот код.

    <?php
        define('WP_USE_THEMES', false);
        echo "<h1>printer friendly version:</h1>\n";
        query_posts('p='.$_GET['pid']);
        if (have_posts()){
            while ( have_posts() ) { the_post();
                the_content();
            }
        }else{
        echo 'nothing found';
        }
    ?>
    

    и теперь все, что вам нужно сделать, это создать ссылку с ?my_print=$post_id в вашем обычном одиночном цикле.

    надеюсь это поможет

    • 0
    • Это здорово!!! Пара вещей, хотя… Во-первых, это опечатка, вы написали /my_print_template с буквой H в функции (/my_print_themplate). Ничего страшного, я нашел это легко. Теперь единственная проблема, с которой я столкнулся, это функция печати, которая выводит несколько сообщений на страницу. Я попытался ограничить его, используя posts_per_page только до 1, но это был неправильный пост. Похоже, это был самый последний опубликованный пост. Как передать правильную переменную идентификатора сообщения, чтобы она отражалась в шаблоне печати? СПАСИБО!!!

      • 0
    • Привет Bainternet, очень хороший учебник! Можно ли использовать больше шаблонов? Я имею в виду my_print_themplate.php, my_print_themplate2.php, my_print_themplate3.php. Мне нужно 5 версия для печати для моих сообщений. Спасибо за вашу помощь!

      • 0
    • Привет @Vincent и добро пожаловать в сообщество WPSE. Поле для ответов, которое вы только что использовали, предназначено только для ответов — это важный аспект удобства использования этого сайта. Ваш пост больше похож на комментарий или вопрос, поэтому он может быть сочтен здесь неуместным. Пожалуйста, помогите модераторам сайта и удалите его отсюда самостоятельно. Спасибо. ( Чтобы иметь возможность оставлять комментарии везде, вам нужно иметь не менее 50 репутации) См.: FAQ: Почему некоторые вопросы или ответы удалены? и часто задаваемые вопросы: Репутация

      • 0
    • кажется немного резким. break возможно?

      • 0
    • @GhostToast, если вы не позвоните die() после своего пользовательского /my_print_* шаблона, WordPress будет следовать своему первоначальному маршруту. И в итоге вы получите конкатенацию пользовательского шаблона и шаблона по умолчанию.

      • 0
  2. Я просто немного изменил ответ @Bainternet.

    Используя переключатель post_type, можно даже перенаправить на разные шаблоны. По умолчанию WordPress игнорирует параметр my_print и работает как обычно.

    add_action("template_redirect", 'my_template_redirect_2322');
    
    // Template selection
    function my_template_redirect_2322()
    {
        global $wp;
        global $wp_query;
    
        if (isset($wp->query_vars["my_print"]))
        {
            switch ($wp_query->post->post_type) {
            case "page" :
                include(TEMPLATEPATH . '/my_print_page_themplate.php');
                die();
            case "portfolio" :
                include(TEMPLATEPATH . '/my_print_portfolio_themplate.php');
                die();
            case "post" :
                include(TEMPLATEPATH . '/my_print_post_themplate.php');
                die();
            default:
                // load as usual
            }
        }
    }
    
    • 0
  3. Спасибо за решение, Bainternet. Как сообщил RodeoRamsay, он загружал несколько сообщений из типа сообщений по умолчанию, поэтому я заставил его работать с моим пользовательским типом сообщений следующим образом:

    <?php
        define('WP_USE_THEMES', false);
        //echo "<h1>printer friendly version:</h1>\n";
        setup_postdata($_GET['pid']); 
        while ( have_posts() ) : the_post();
                the_content();
    
        endwhile;
    ?>
    
    • 0

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

You must login to add an answer.