it-roy-ru.com

Загрузить сообщение с другими шаблоном?

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

Спасибо!

3
RodeoRamsey

вы можете сделать это так:

    //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 в вашем обычном цикле.

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

8
Bainternet

Я только слегка изменил ответ @ 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
        }
    }
}
2
Daishi

Спасибо за решение, 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
Taruc