Como mencioné , iba a comenzar a trabajar en esta necesidad de inmediato, así que estoy avanzando. Dado que estoy derribando estos, pensé que es mejor comenzar a publicarlos. Aún así, si alguien más puede / publicará (algunas de) las partes que no he hecho, estaré encantado de permitirle copiar lo que haya hecho que no haya hecho y seleccionar su respuesta como la mejor respuesta. Hasta entonces, voy a comenzar a publicar el código.
Primera cosa: Incluye wp-load.php
:
Como estamos creando un archivo independiente en la raíz del sitio web para ejecutar la inicialización que solo se usará para "arrancar" un sitio (lo llamé mío /my-init.php
) , comenzamos por incluir /wp-load.php
para cargar las funciones de API de WordPress:
<?php
include "wp-load.php";
Crear usuarios para el sitio
Utilizaremos la wp_insert_user()
función ubicada en /wp-includes/registration.php
para crear nuestros usuarios. Este archivo no se carga de manera predeterminada, por lo que tendremos que cargarlo nosotros mismos con una llamada a require_once()
.
También usaremos la get_user_by()
función para ver primero si el usuario ya ha sido creado; no es necesario ejecutar el código dos veces si no lo han hecho. NOTA: Este es un patrón que seguirá; por ejemplo, nuestro script no debe duplicar ni sobrescribir nada si se llama varias veces, especialmente después de que los usuarios hayan agregado o cambiado datos para cualquiera de los elementos que planeamos inicializar.
require_once( ABSPATH . WPINC . '/registration.php');
$user = get_user_by('slug','johnsmith');
if (!is_object($user)) {
wp_insert_user(array(
'user_login' => 'johnsmith',
'role' => 'administrator',
'user_email' => 'johnsmith@example.com',
'user_url' => 'http://example.com',
'first_name' => 'John',
'last_name' => 'Smith',
'comment_shortcuts' => '',
'use_ssl' => '0',
'user_pass' => '12345',
));
}
Eliminar el complemento "Hello Dolly"
Para eliminar el complemento "Hello Dolly" (lo siento Matt ) usaremos la delete_plugins()
función. delete_plugins()
espera una matriz de rutas de archivos que son relativas al /wp-content/includes/
directorio. Para el complemento Hello Dolly, la ruta del archivo es simplemente hello.php
porque el complemento Hello Dolly no está almacenado en su propio directorio, pero para la mayoría de los complementos será en forma de {$subdir}\{$filename}.php
; es decir, la ruta del archivo para Akismet es akismet/akismet.php
.
Sin embargo, delete_plugins()
no está disponible hasta que lo hayamos incluido /wp-admin/includes/plugin.php
y también hay una dependencia con wp-admin/includes/file.php
los require_once()
dos antes de llamar delete_plugins()
. Finalmente, usamos WP_PLUGIN_DIR
constante combinado con file_exists()
para ver si el archivo de complemento principal existe antes de que intentemos eliminarlo (no es importante si tratamos de eliminar un archivo faltante, pero es más elegante verificarlo primero y es posible que necesite saber cómo por alguna otra razón) :
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
if (file_exists(WP_PLUGIN_DIR . '/hello.php'))
delete_plugins(array('hello.php'));
Tenga en cuenta que a veces delete_plugins()
fallará debido a los permisos de archivo o tal vez el hecho de que un complemento está activado actualmente o alguna otra razón que primero deberá resolver, pero para nuestro caso de uso Hello Dolly desaparece sin luchar.
Descarga, instalación y activación de complementos de repositorio
En realidad, no necesito descargar complementos desde el repositorio en este momento (estaba pensando que sería bueno tenerlo) vamos a dejar pasar este requisito y volver a visitarlo más tarde.
Activando sus complementos
El siguiente paso es activar nuestros propios complementos personalizados. Asumimos que ya los hemos subido al directorio de complementos y todo lo que necesitamos para hacerlo es activarlos para WordPress. ( Nota : esta técnica también funcionará para activar los complementos del repositorio, simplemente no los descargará e instalará primero).
Utilizaremos la activate_plugin()
función que delete_plugins()
requiere /wp-admin/includes/plugin.php
que se incluya pero no es necesaria /wp-admin/includes/file.php
en caso de que solo necesite automatizar la activación y no la eliminación.
Volveremos a probar la existencia (no es necesario activarla si no está allí, ¿eh?) Y también verificaremos mediante la is_plugin_active()
función que el complemento aún no se ha activado. Tenga en cuenta que esta vez utilicé algunas variables ( $plugin_filepath
y $plugin_dir
) para evitar duplicar el identificador del complemento en numerosas ocasiones.
Nuestro ejemplo que sigue activa el complemento my-custom-plugin.php
que se encuentra en el my-custom-plugin
subdirectorio:
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_filepath = 'my-custom-plugin/my-custom-plugin.php';
$plugin_dir = WP_PLUGIN_DIR . "/{$plugin_filepath}";
if (file_exists($plugin_dir) && !is_plugin_active($plugin_filepath))
activate_plugin($plugin_filepath);
Activando su tema preferido
Activar un tema es un poco más fácil que eliminar o activar un complemento, comparativamente hablando; una llamada a la función es todo lo que se requiere: switch_theme()
. La switch_theme()
función acepta dos (2) parámetros: la plantilla y la hoja de estilo . Bueno, al menos así se llaman los parámetros. Es posible que esté más familiarizado con los términos Tema principal y Tema secundario .
Suponiendo que haya creado un tema secundario con el tema predeterminado TwentyTen que viene con WordPress como tema principal y lo llamó "Mi tema personalizado" y lo colocó en el /wp-content/themes/my-custom-theme
directorio, activaría su tema mediante esta llamada:
switch_theme('twentyten', 'my-custom-theme');
Pero, ¿y si no es un tema infantil? Eso es fácil, simplemente pase el identificador de directorio slug / theme (es decir, el nombre del subdirectorio /wp-content/themes
que contiene su tema) como ambos parámetros. Suponiendo que desea activar el tema temático de Ian D Stewart que ha llamado switch_theme()
así:
switch_theme('thematic', 'thematic');
Personalmente, creo que es un poco extraño tener que hacer un seguimiento de ambos detalles aquí, así que escribí una función llamada activate_my_theme()
que primero verifica para asegurarse de que la get_current_theme()
función y, si no, la activa. Solo necesita decirle el tema secundario (también conocido como la "hoja de estilo") y descubrirá el tema principal para usted (también conocido como la "plantilla") tomando los detalles de la get_theme()
función.
activate_my_theme('My Current Theme');
function activate_my_theme($theme_name) {
if ($theme_name!=get_current_theme()) {
$theme = get_theme($theme_name);
switch_theme(
$theme['Template'],
$theme['Stylesheet']
);
}
}
Un punto clave a tener en cuenta ; la get_theme()
función espera que se le pase el nombre del Tema secundario, NO su identificador de tema / slug de directorio. (El nombre proviene de la sección "Nombre del tema:" en el encabezado del style.css
archivo del tema . Afortunadamente, la get_current_theme()
función también devuelve el nombre).
Al inspeccionar el encabezado en el style.css
archivo del tema predeterminado de WordPress Twenty Ten , vemos que su nombre es, de hecho 'Twenty Ten'
:
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Version: 1.1
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style
*/
Eliminar la publicación "Hello World"
A continuación, queremos eliminar la publicación "Hello World" . Es posible que haya visto que @Rarst nos ha mostrado cómo usar la wp_delete_post()
función, que es exactamente lo que necesitamos. Como explicó, el segundo parámetro eliminará completamente la publicación en lugar de moverla a la papelera y el primer parámetro es el $post->ID
.
Por supuesto, sería bueno poder especificar la babosa en lugar de la $post->ID
y, por lo tanto, decido encontrar una manera de hacerlo. Después de un poco de espeleología, descubrí que WordPress tiene una función llamada desafortunadamente llamada get_page_by_path()
que en realidad nos permite buscar cualquier tipo de publicación por su babosa (desafortunadamente se llama porque podrías pasarla por alto cuando intentas encontrar algo que funcione con tipos de publicación que no sean 'page'
).
Como pasamos get_page_by_path()
la constante definida por WordPress OBJECT
, nos devolverá una publicación en forma de un objeto de publicación. Para el tercer parámetro que pasamos 'post'
para indicar que queríamos buscar tipos de publicación de 'post'
. Dado get_page_by_path()
que devolverá el objeto de publicación que necesitamos o devolverá null
si ninguna publicación coincide con el slug, podemos verificar la existencia y hacer una búsqueda al mismo tiempo:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Nota: Podríamos haber ejecutado código para eliminar cada publicación en la base de datos, pero si lo hubiéramos hecho, no podríamos ejecutar este código nuevamente una vez que hayamos agregado las publicaciones que queremos conservar y esa fue una de nuestras limitaciones de diseño.
Próximo...
Seguiré agregando a esto mientras lo descubro hasta que termine o hasta que alguien más me ayude.
Create Menus for Custom Pages
? ¿Te refieres a áreas de menú individuales en algunas páginas o qué?