Cargar plantilla de página con contenido personalizado usando un complemento

2

Quiero cargar la plantilla page.php con el contenido que especifico (usando variables y no de la base de datos) si la solicitud contiene una cadena de consulta en particular.

Entonces, digamos que un usuario solicita example.com/?var1=str1 la plantilla de página debe mostrarse con el título y el contenido que especifico usando variables.

Este es el pseudo código de lo que estoy tratando de lograr

<?php
function my_page_function() {
if($_REQUEST['var1'] == "str1")
{
$title="This will be the title of the default page template";
$content="This content will be displayed on the default page template.";
//Load the page.php here with the title and content specified in the variables above
}
}
add_action("template_redirect","my_page_function");
?>

Deseo utilizar este código en un complemento, por lo que debería funcionar con la página.php de cualquier tema.

    
pregunta A.Jesin 14.09.2013 - 21:10

2 respuestas

3

Puede lograr eso con los filtros en the_content y the_title :

function wpa_content_filter( $content ) {
    if( isset( $_REQUEST['var1'] ) && $_REQUEST['var1'] == "str1" ) {
        return 'This content will be displayed on the default page template.';
    }
    return $content;
}
add_filter( 'the_content', 'wpa_content_filter', 999 );
    
respondido por el Milo 14.09.2013 - 21:20
2

Crea el archivo de plantilla dentro de tu complemento, por ejemplo, template-pluginname.php , luego enganche en template_include y dígale a WordPress que lo use:

function wpse114181_template_include( $template ) {
    return ( '' != get_query_var( 'plugin_key' ) ? plugin_dir_path( __FILE__ ) . 'template-plugin.php' : $template );
}
add_filter( 'template_include', 'wpse114181_template_include' );

Nota: esto requiere que registres tu variable de consulta usando add_query_arg() , pero es más seguro que confiar en $_REQUEST directamente.

Editar

Basado en este comentario:

  

El único problema con este código es que, como dije anteriormente, quiero que el complemento funcione correctamente con cualquier tema. Por lo tanto, si diseño un archivo de plantilla yo mismo no se vería como la página.php del tema actualmente activado

Si tiene la absoluta intención de anular el título de la publicación y el contenido de la publicación, puede usar los filtros the_title y the_content :

function wpse114181_filter_the_title( $title ) {
    if ( is_page() && '' != get_query_var( 'plugin_key' ) ) {
        return 'Your Post Title Here';
    } else {
        return $title;
    }
}
add_filter( 'the_title', 'wpse114181_filter_the_title' );

function wpse114181_filter_the_content( $content ) {
    if ( is_page() && '' != get_query_var( 'plugin_key' ) ) {
        return 'Your Post Content Here';
    } else {
        return $content;
    }
}
add_filter( 'the_content', 'wpse114181_filter_the_content' );
    
respondido por el Chip Bennett 14.09.2013 - 21:42

Lea otras preguntas en las etiquetas