Permitir que los usuarios agreguen funciones personalizadas al tema de wordpress

2

Me gustaría permitir que los usuarios agreguen funciones al tema que estoy desarrollando, pero no quiero que los usuarios cambien functions.php directamente, ya que este archivo puede actualizarse con las actualizaciones del tema. En otras palabras, me gustaría que esto funcione de manera similar a los archivos CSS personalizados.

¿Cómo puedo configurar un archivo user-functions.php para los usuarios y asegurar que esas funciones también se ejecutan cuando se activa el tema?

    
pregunta chowwy 05.02.2013 - 20:15

5 respuestas

1

Mi sugerencia sería utilizar get_template_part . Creo que es lo más cerca que puedes llegar a lo que quieres.

Es posible que solo puedas colocar get_template_part('userfuncts'); en tu functions.php . Eso cargará userfuncts.php desde el directorio principal de su tema, si el archivo está presente, o desde el directorio de un tema secundario, si corresponde. Vea el Codex para saber cómo la función busca archivos. Es una versión mejorada de PHP include realmente. Cualquier función que funcione en functions.php debería funcionar en ese archivo incluido. Pero esa es una condición importante. Algunas cosas no se cargan bien de functions.php de un tema y deben estar en un complemento.

Sin embargo, EAMann tiene un buen punto. Si bien es posible actualizar el tema sin perder el archivo userfuncts.php , este no es necesariamente el caso. Es bastante común eliminar completamente un tema y luego cargar la actualización. No sé cómo lo hace el actualizador automático, ya que nunca uso ese actualizador, pero si se elimina y luego vuelve a instalarlo, tendrá problemas.

Podría hacer algo como crear dos directorios para su tema: el principal y el segundo directorio de funciones del usuario.

  • wp-content / themes / my-theme
  • wp-content / themes / my-theme-userfuncts

Luego cree una función similar a get_template_part para cargar archivos desde ese directorio. No debería ser difícil usar get_template_part como modelo. Tendrías una especie de tema pseudo-infantil. Podría ser una fuente de confusión, pero una buena documentación ayudaría mucho y no tengo idea de cuán 'adecuada' es esa solución. Solo pensé en eso. Espero que no me griten :)

Tu tema podría instalarse solo y con un niño, pero tendrías el mismo problema de actualización si alguna vez alteraras al niño.

    
respondido por el s_ha_dum 05.02.2013 - 21:18
2

Realmente, todos los archivos que coloques en el tema se reemplazarán / eliminarán cuando el tema se actualice.

En cambio, si desea que los usuarios agreguen funcionalidad personalizada, deberían hacerlo a través de un complemento personalizado. Si tiene ganchos y filtros expuestos a través del tema, un complemento de funcionalidad personalizada resolverá el problema.

Básicamente, son dos archivos:

readme.txt

=== My Functionality Plugin ===
Contributors:      me
Donate link:
Tags:
Requires at least: 3.4.2
Tested up to:      3.5
Stable tag:        1.0
License:           GPLv2 or later
License URI:       http://www.gnu.org/licenses/gpl-2.0.html

Adds custom functionality where needed

function.php

<?php
/**
 * Plugin Name: My Functionality Plugin
 * Plugin URL:
 * Description: Adds custom functionality where needed
 * Version:     1.0
 * Author:      Me
 * Author URI:  
 * License:     GPL2+
 */

function filter_my_theme_copyright( $copyright ) {
    return '&copy; 2013';
}
add_filter( 'my_theme_copyright', 'filter_my_theme_copyright' );

Sin saber qué está haciendo tu tema o qué funcionalidad personalizada necesitas, no puedo ser muy preciso. Pero si expone acciones en las que quiere que los usuarios hagan algo y filtren qué salida desea que filtren, entonces cualquiera puede usar un complemento de funcionalidad personalizada como este sin piratear el tema directamente.

    
respondido por el EAMann 05.02.2013 - 20:30
2

Para permitirle al usuario funciones , realmente tiene dos opciones:

  1. Haga que su tema sea Fácil para niños como sea posible, y aliente a los usuarios a definir funciones personalizadas en el Tema infantil functions.php
  2. Proporcione una gran cantidad de ganchos de acción / filtro para que el usuario defina las funciones de devolución de llamada, ya sea a través del tema secundario o mediante un complemento personalizado.
respondido por el Chip Bennett 05.02.2013 - 21:23
1

Hay un complemento que te permite hacer esto en el administrador, permite funciones de entrada de usuario portátiles (tema agnóstico), sin necesidad de editar las funciones de tu tema.php

Puede verlo aquí: enlace

Puede descargarlo desde wordpress.org aquí: enlace

Captura de pantalla:

    
respondido por el Wyck 05.02.2013 - 21:23
1

Para garantizar que sus clientes puedan anular fácilmente aspectos de su tema, lo mejor es seguir las convenciones existentes de WordPress para esto, es decir, un tema secundario. "functions.php" también está destinado a un código personalizado ingresado por el usuario, pero dijiste que preferirías mantenerte alejado de eso, así que me centraré en otras opciones.

La regla general de oro es la siguiente:

Estilos

La anulación de los estilos CSS se debe hacer en el archivo "style.css" dentro de un tema secundario.

Funciones

La anulación de las funciones de procedimiento se debe hacer usando funciones conectables. El Códice de WordPress tiene un ejemplo de cómo configurar funciones conectables .

Funciones enlazadas

Si bien las funciones que están asignadas a un gancho o filtro también se pueden conectar, también podría alentar a los clientes a que desconecten la función y enganchen su propio reemplazo. Esto le ahorraría, a lo sumo, 2 líneas de código por función en sus archivos, ya que no estaría conectando las funciones.

Partes de plantilla

Si desea que los clientes puedan anular fácilmente secciones específicas de la salida de su tema sin tener que copiar un archivo de plantilla completo en su tema secundario, podría hacer un uso efectivo de las partes de la plantilla para lograr esto (por ejemplo, si su área de pie de página contiene widgets y luego, tal vez, una sección de créditos, cada uno de ellos podría ser una parte de la plantilla).

Como se mencionó anteriormente, la colocación efectiva de do_action() calls es una forma fácil de permitir a los clientes enganchar su propio código.

Combinado con las opciones anteriores, debe estar bien encaminado para que sus clientes personalicen fácilmente su tema utilizando las convenciones de WordPress existentes y faciliten la actualización de su copia de su tema a versiones futuras. :)

    
respondido por el Matty 06.02.2013 - 10:47

Lea otras preguntas en las etiquetas