Cómo eliminar las opciones de tema de WordPress del tema secundario

6 minutos de lectura

avatar de usuario
emersonthis

Comienzo nuevos proyectos escribiendo un tema secundario para el tema de veinte once. Rara vez diseño el nuevo tema para usar cualquiera de las opciones integradas en el tema de veinte once (como el color de fondo, etc.). Esas opciones residuales realmente no dañan nada, pero me gustaría deshacerme de ellas ya que no hacen nada.

El problema es que las opciones del tema se declaran en el archivo functions.php del tema principal, que se carga junto con (no en lugar de) el archivo functions.php del tema secundario (así que podría eliminarlos pero volverán en la próxima actualización).

¿Hay alguna forma de eliminar o deshabilitar esas opciones de tema de mi tema secundario? ¿Quizás algo similar a una función “remove_options()”? ¿O tal vez algo que lograría ese efecto? En otras palabras, la pregunta es si theme_options se puede eliminar SIN eliminar/anular la función original que los agregó.

Estoy seguro de que con suficiente tiempo, podría ocultar la opción con CSS o javascript… pero vamos.

avatar de usuario
emersonthis

Después de una segunda ronda de excavación…

¡Esto es TOTALMENTE fácil!

Puedes volver sobre mis pasos comenzando aquípero el código se explica por sí mismo:

add_action( 'init', 'remove_crap' );
    function remove_crap() {

    remove_custom_image_header();
    remove_custom_background();
    remove_theme_support('post-formats');
}

Puedes buscarlos en el códice. Remove_theme_support toma una de varias cadenas que identifican varias opciones (además de los formatos posteriores). El único problema que encontré es que deben llamarse desde un enlace (no puede simplemente volcarlos en functions.php). Estoy usando init pero probablemente haya otro más apropiado.

Lo único que aún no he descubierto es cómo eliminar el enlace de la página “Opciones de tema” que aparece en Apariencias. Sé que se agrega con add_theme_page() pero no parece ser útil remove_theme_page().

ACTUALIZACIÓN: ¡Lo encontré! Esto está MUY mal documentado, pero al final es bastante fácil de hacer:

add_action('admin_init', 'remove_twentyeleven_theme_options', 11);
     function remove_twentyeleven_theme_options() {
 remove_submenu_page('themes.php', 'theme_options');
}

En mi ejemplo, ‘themes.php’ apunta al menú Apariencias y ‘theme_options’ es el menu_slug usado en el tema de twentyeleven. Obviamente, estos parámetros diferirán según el menú o submenú que esté editando. Esta página le indicará la dirección correcta.

pd: aquí se explica cómo deshacerse de las plantillas del tema principal que no desea utilizar:
ESTE no es esencial para mi pregunta exacta, pero está estrechamente relacionado y probablemente sea útil para cualquiera que intente hacer lo que estoy haciendo.

  • Ninguna de estas sugerencias es en realidad la forma “correcta” de lograr esto: las funciones remove_* están todas obsoletas a favor de remove_theme_support, y es demasiado tarde para llamar a estas funciones; debería estar en “after_setup_theme”. La opción “remove_submenu_page” simplemente oculta el menú, en realidad no desactiva el soporte. La forma correcta de hacer esto es en una acción after_setup_theme con una prioridad inferior a 10 (es decir, 11 o más) para asegurarse de que se ejecuta después de la llamada del padre a after_setup_theme (suponiendo que el tema principal use la prioridad predeterminada de 10). Publicaré una nueva respuesta como referencia.

    – Simón Hampel

    6 de febrero de 2013 a las 5:40


  • Gracias por esto, SDP. Me preguntaba si conocías alguna forma de eliminar solo una pestaña de opciones del tema principal en lugar de todo el theme options ¿panel? Mi pregunta se describe aquí en detalle si tiene tiempo para mirarla: wordpress.stackexchange.com/questions/138584/…

    – J82

    20 de marzo de 2014 a las 8:13

La forma correcta de eliminar la compatibilidad con temas agregada en un tema principal del tema secundario es realizar la llamada a remove_theme_support en una acción after_setup_theme llamada con una prioridad más baja que la del elemento principal.

El archivo functions.php de un tema secundario se llama inmediatamente antes que el del tema principal, por lo que si usa la prioridad predeterminada para after_setup_theme, el after_setup_theme del hijo termina siendo llamado antes que el del tema principal, por lo que termina eliminando elementos inexistentes. soporte de tema en su hijo, solo para que se vuelva a agregar desde el padre que ejecuta after_setup_theme.

Entonces, al agregar la acción de su hijo con una prioridad más baja, puede asegurarse de que se llame después de la llamada del padre a la misma acción.

Asi que:

// added to child's functions.php    

add_action( 'after_setup_theme', 'child_after_setup_theme', 11 ); 
// Parent theme uses the default priority of 10, so
// use a priority of 11 to load after the parent theme.

function child_after_setup_theme()
{
    remove_theme_support('custom-background');
    remove_theme_support('custom-header');
    remove_theme_support('post-formats');
    // ... etc.
}

En el caso del tema twentyeleven, también podría anular toda la función twentyeleven_setup en el archivo functions.php de su hijo, pero ese es un método bastante poco sutil para lograrlo.

  • ¿Hay alguna forma de eliminar solo una pestaña de opciones del tema principal en lugar de todo el theme options ¿panel? Mi pregunta se describe aquí en detalle si tiene tiempo para mirarla: wordpress.stackexchange.com/questions/138584/…

    – J82

    20 de marzo de 2014 a las 8:13

  • Supuestamente, Simon tiene razón. Esta es la forma correcta de lograrlo. Sin embargo, no puedo hacer que funcione en un tema secundario de WC Storefront. No sé cómo eliminar este maldito código.

    – Pbinder

    3 de noviembre de 2016 a las 7:53

avatar de usuario
summea

Desafortunadamente, la forma en que funciona la herencia de temas en el caso de WordPress es que las funciones del tema secundario simplemente se “agregan” a las funciones del tema principal.

A diferencia de style.css, functions.php de un tema secundario no anula su contraparte del tema principal. En su lugar, se carga además del archivo functions.php del padre. (Específicamente, se carga justo antes del archivo principal). (1)

Entonces, en respuesta directa a su pregunta anterior, parece (2) que esto podría no ser posible con la forma en que WordPress maneja los temas y los temas secundarios.

Personalmente, no me preocuparía tener esas funciones o variables adicionales en el archivo functions.php.

  1. http://codex.wordpress.org/Child_Themes
  2. http://wordpress.org/support/topic/theme-options-in-child-theme

  • Gracias, pero esto no es realmente útil porque esencialmente reafirma la pregunta original.

    – emersonthis

    25 de enero de 2012 a las 17:23

  • Creo que la respuesta radica en el hecho de que los temas secundarios no pueden eliminar las funciones del tema principal.

    – summea

    25 de enero de 2012 a las 18:10

  • Edité la respuesta para incluir la respuesta implícita original. 🙂

    – summea

    25 de enero de 2012 a las 18:14

Este es un hilo antiguo, así que solo quiero agregar si alguien ingresa a este lugar y quiere una respuesta. Resuelvo el tema secundario tomando ese archivo exacto, haciendo una copia y agregándolo al tema secundario. Tengo el complemento “editor de código avanzado”, así que no necesito ir a FTP. Copie el archivo específico que desea editar, cree una nueva hoja en el tema secundario con el mismo nombre y contenido, y luego realice las ediciones que desee allí. Primero obtendrá los archivos del tema secundario y su sitio se actualizará.

¿Ha sido útil esta solución?