single plugin plantilla personalizar para index fuente etiqueta editar codigo archivos agregar wordpress templates wordpress-theming

wordpress - plugin - Anulación de plantillas usando una sección de personalización



plugin para editar html wordpress (1)

Estoy tratando de anular mis plantillas predeterminadas de la sección de personalización, estoy usando código para hacer eso, pero si lo estoy usando no puedo asignar una plantilla a la página de edición. ¿Alguien puede dar una idea de cómo funciona la sección de personalización? y editar página asignar plantilla de trabajo. Quiero configurar la plantilla cuando estoy creando una página y, después de asignarla, deseo anularla. Ten en cuenta que tengo una página de blog, quiero asignarle la plantilla archive.php y diez quiero anularla desde la sección de personalización. Hay una condición particular donde quiero que funcione.

<?php /** * Adds the Customize page to Select template For Pages */ add_action( ''wp_footer'', ''cur_page_template'' ); function cur_page_template(){ var_dump( get_option(''current_page_template'') ); var_dump( get_page_template() ); exit; } function widgetsite_template_override($wp_customize){ $wp_customize->add_panel( ''template_options'', array( ''title'' => __( ''Template Options'', ''widgetsite'' ), ''description'' => $description, // Include html tags such as <p>. ''priority'' => 160, // Mixed with top-level-section hierarchy. ) ); $wp_customize->add_section(''theme_template_override'', array( ''title'' => __(''Override Templates'', ''widgetsite''), ''panel'' => ''template_options'', ''description'' => '''', ''priority'' => 120, )); $templates = get_page_templates(); $cats = array(); $i = 0; foreach($templates as $template_name => $template_file){ //$cats[$template_name] = $template_name; if (strpos($template_file,''layouts'') !== false) { $cats[$template_file] = $template_name; } } $wp_customize->add_setting(''widgetsite_archive_template''); $wp_customize->add_setting(''widgetsite_page_template''); $wp_customize->add_setting(''widgetsite_index_template''); $wp_customize->add_setting(''widgetsite_post_template''); $wp_customize->add_setting(''widgetsite_search_template''); $wp_customize->add_control( ''widgetsite_archive_template'', array( ''settings'' => ''widgetsite_archive_template'', ''label'' => ''Override Archive Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge(array( "archive.php"=>get_option(''current_page_template'')), $cats) )); $wp_customize->add_control( ''widgetsite_page_template'', array( ''settings'' => ''widgetsite_page_template'', ''label'' => ''Override Page Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge( array( "page.php" =>get_option(''current_page_template'')), $cats) )); $wp_customize->add_control( ''widgetsite_index_template'', array( ''settings'' => ''widgetsite_index_template'', ''label'' => ''Override Index Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge(array( "index.php"=>get_option(''current_page_template'')), $cats) )); $wp_customize->add_control( ''widgetsite_post_template'', array( ''settings'' => ''widgetsite_post_template'', ''label'' => ''Override Post Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge(array( "post.php"=>get_option(''current_page_template'')), $cats) )); $wp_customize->add_control( ''widgetsite_search_template'', array( ''settings'' => ''widgetsite_search_template'', ''label'' => ''Override Search Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge(array( "search.php"=>get_option(''current_page_template'')), $cats) )); } add_action(''customize_register'', ''widgetsite_template_override''); $theme_mode_templates[''archive.php''] = get_theme_mod("widgetsite_archive_template"); $theme_mode_templates[''page.php''] = get_theme_mod("widgetsite_page_template"); $theme_mode_templates[''index.php''] = get_theme_mod("widgetsite_index_template"); $theme_mode_templates[''post.php''] = get_theme_mod("widgetsite_post_template"); $theme_mode_templates[''search.php''] = get_theme_mod("widgetsite_search_template"); function widgetsite_template_redirect($template){ global $wp_query; global $post; $cur= basename($template); if( $cur === ''page.php'' && get_theme_mod("widgetsite_page_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/'' . get_theme_mod("widgetsite_page_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } if( $cur === ''archive.php'' && get_theme_mod("widgetsite_archive_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/'' . get_theme_mod("widgetsite_archive_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } if( $cur === ''index.php'' && get_theme_mod("widgetsite_index_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/'' . get_theme_mod("widgetsite_index_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } if( $cur === ''post.php'' && get_theme_mod("widgetsite_post_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/'' . get_theme_mod("widgetsite_post_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } if( $cur === ''search.php'' && get_theme_mod("widgetsite_search_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/'' . get_theme_mod("widgetsite_search_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } return $template; } add_filter( ''template_include'', ''widgetsite_template_redirect'', 99 );


  1. Cómo funciona el cuadro de plantilla de elección desde la pantalla de edición posterior.

Es importante recordar que las páginas también son publicaciones y todos los metadatos relacionados con las publicaciones se almacenan en la tabla de metadatos de la publicación. Los tipos de publicación de página difieren ligeramente de los tipos de publicación estándar, ya que no siguen la función de uso de la plantilla single-postname.php . En su lugar, las páginas guardan la ruta del archivo de plantilla en la tabla de base de datos wp_postmeta con una clave de _wp_page_template .

Entonces, una opción para cambiar este valor es cambiarlo después de guardar la publicación.

function save_template_file( $post_id ) { if ( ''page'' != $post->post_type ) { return; } //insert logic here $filelocation= ''anywhere.....''; update_post_meta($post_id, ''_wp_page_template'', $filelocation); } add_action(''save_post'', ''save_template_file'', 11 );

Ahora bien, esto no es lo que está buscando, pero mencionó que quería entender el proceso, por lo que para las páginas, wp hará referencia al archivo de plantilla de la publicación meta y extraerá este valor. Así que puede cambiarlo después de guardarlo si siempre seguirá la misma lógica (optimiza ligeramente el proceso). Este es el archivo que se muestra en la pantalla de edición de publicaciones y siempre obtendrá el valor de db a menos que wp intente cargar la plantilla y se dé cuenta de que ya no existe, en cuyo caso vuelve al archivo predeterminado en el cuadro de selección.

  1. El filtro template_include está dentro de la función que busca la plantilla correcta para el tipo de publicación de las páginas (otros tipos de publicación tienen el filtro single_template )

Su uso de incluir aquí es incorrecto. No olvide que un filtro esperará que un valor devuelto funcione correctamente en este caso $template .

Así que si queremos cambiar la plantilla por páginas ...

add_filter(''template_include'', ''assign_new_template''); function assign_new_template ($template){ //we already have a template name, no need to pull it again.. $cur= basename($template); if( $cur === ''page.php'' && get_theme_mod("widgetsite_page_template")){ //note $cur will never be empty! $template= get_template_directory() . ''/layouts/'' . get_theme_mod("widgetsite_page_template");// assuming this will return correct template... //if issues try hardcoding a path to test... } // dont need a else, we will only change the template if our logic is satisfied... // etc return $template; }

  1. Configurando las selecciones

Le falta el valor por defecto, así que propongo el siguiente mod, ya que no puedo ver cuál es su configuración en get_option(''current_page_template'') pero si hay un nombre de archivo correcto, reemplace page.php con él.

Si bien no está configurando un valor predeterminado para su cuadro de selección, su página mostrará el primer valor de la selección si ninguno está marcado como seleccionado, por lo que debería funcionar igual.

$wp_customize->add_control( ''widgetsite_search_template'', array( ''settings'' => ''widgetsite_search_template'', ''label'' => ''Override Search Template:'', ''section'' => ''theme_template_override'', ''type'' => ''select'', ''choices'' => array_merge(array("page.php"=>''default''), $cats) ));

Si vuelves a guardar todas las opciones como arriba, ¡debería estar funcionando (fue para mí)!