web-dev-qa-db-ja.com

別のテンプレートで投稿を読み込みますか?

特定のレイアウトを持つsingle.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