web-dev-qa-db-fra.com

Charger le post avec un modèle différent?

Disons que j'ai un fichier single.php avec une certaine mise en page (graphique intensive). Je souhaite créer une sorte de version en texte brut de la même page qui n'est appelée que lorsque l'utilisateur clique sur le lien fourni. Je peux créer single-plaintxt.php, mais comment puis-je générer un lien et/ou une fonction qui ne chargerait que le contenu de la page à l'aide de ce fichier lorsque l'utilisateur clique dessus?

Merci!

3
RodeoRamsey

vous pouvez le faire comme ça:

    //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');

puis ajoutez une redirection de modèle basée sur cette requête_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();

    }
}

créez un nouveau fichier dans votre répertoire de thème nommé "my_print_themplate.php" et collez-y ce code.

<?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';
    }
?>

et maintenant, il ne vous reste plus qu'à créer un lien avec? my_print = $ post_id dans votre boucle simple habituelle.

j'espère que cela t'aides

8
Bainternet

Je viens de modifier légèrement la réponse de @Bainternet.

En utilisant un commutateur sur post_type, il est même possible de rediriger vers différents modèles. La valeur par défaut laissera wordpress ignorer le paramètre my_print et continuer comme d’habitude.

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

Merci pour la solution, Bainternet. Comme RodeoRamsay l'a signalé, plusieurs messages ont été postés à partir du type de message par défaut. Je l'ai donc fait fonctionner avec mon type de message personnalisé comme suit:

<?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