Como mencionei, começaria a trabalhar nessa necessidade imediatamente, por isso estou avançando. Dado que estou derrubando estes, achei melhor começar a publicá-los. Ainda assim, se alguém puder / irá postar (algumas das) partes que eu não fiz, ficarei feliz em permitir que você copie o que eu fizesse e selecione sua resposta como a melhor resposta. Até lá, vou começar a postar o código.
Primeira coisa: Incluir wp-load.php
:
Como estamos criando um arquivo autônomo na raiz do site para executar a inicialização que será usada apenas para "inicializar" um site (eu chamei de meu /my-init.php
) , começamos incluindo o /wp-load.php
carregamento das funções da API do WordPress:
<?php
include "wp-load.php";
Criando usuários para o site
Usaremos a wp_insert_user()
função localizada /wp-includes/registration.php
para criar nossos usuários. Como esse arquivo não é carregado por padrão, teremos que carregá-lo sozinhos com uma chamada para require_once()
.
Também usaremos a get_user_by()
função para ver primeiro se o usuário já foi criado; não é necessário executar o código duas vezes, se não o tiverem. NOTA: Este é um padrão a seguir; por exemplo, nosso script não deve duplicar ou substituir nada se chamado várias vezes, especialmente depois que os usuários adicionam ou alteram dados para qualquer um dos itens que planejamos 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',
));
}
Excluindo o plug-in "Hello Dolly"
Para excluir o plugin "Hello Dolly" ( desculpe Matt ) , usaremos a delete_plugins()
função delete_plugins()
espera uma matriz de caminhos de arquivo que sejam relativos ao /wp-content/includes/
diretório. Para o plug-in Hello Dolly, o caminho do arquivo é simplesmente hello.php
porque o plug-in Hello Dolly não é armazenado em seu próprio diretório, mas para a maioria dos plug-ins ele será na forma de {$subdir}\{$filename}.php
; ou seja, o caminho do arquivo para o Akismet é akismet/akismet.php
.
No entanto, delete_plugins()
não está disponível até a inclusão /wp-admin/includes/plugin.php
e também existe uma dependência, wp-admin/includes/file.php
portanto, nós require_once()
dois antes de ligar delete_plugins()
. Finalmente, usamos WP_PLUGIN_DIR
constante combinada com file_exists()
para verificar se o arquivo principal do plug-in existe antes de tentar excluí-lo ( isso não importa se tentássemos excluir um arquivo ausente, mas é mais elegante verificar primeiro e você pode precisar saber como por alguma outra razão) :
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'));
Observe que, às vezes delete_plugins()
, falha por causa das permissões de arquivo ou talvez pelo fato de um plug-in estar ativado no momento ou por algum outro motivo que você precise resolver primeiro, mas para o nosso caso de uso, o Hello Dolly desaparece sem brigas.
Fazendo Download, Instalando e Ativando Plug-ins de Repositório
Na verdade, eu não preciso baixar plugins do repositório agora (eu estava pensando que seria bom ter) , vamos deixar esse requisito deslizar e revisá-lo mais tarde.
Ativando seus plugins
Em seguida, ative nossos próprios plugins personalizados. Estamos assumindo que já os carregamos no diretório do plug-in e tudo o que precisamos para ativá- los no WordPress. ( Nota : Essa técnica também funcionará para ativar plug-ins de repositório, apenas não fará o download e os instalará primeiro.)
Vamos usar a activate_plugin()
função que gosta delete_plugins()
requer /wp-admin/includes/plugin.php
a ser incluídos, mas não precisa /wp-admin/includes/file.php
, no caso você está apenas a necessidade de automatizar a ativação e não exclusão.
Testaremos novamente a existência (não é necessário ativar, se não estiver lá, eh?) E também verificaremos usando a is_plugin_active()
função que o plug-in ainda não foi ativado. Observe que desta vez usei algumas variáveis ( $plugin_filepath
e $plugin_dir
) para não duplicar o identificador do plug-in várias vezes.
Nosso exemplo a seguir ativa o plug-in my-custom-plugin.php
localizado no my-custom-plugin
subdiretório:
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);
Ativando seu tema preferido
Ativar um tema é um pouco mais fácil do que excluir ou ativar um plugin, comparativamente; uma chamada de função é tudo o que for necessário: switch_theme()
. A switch_theme()
função aceita dois (2) parâmetros: o modelo e a folha de estilo . Bem, pelo menos é assim que os parâmetros são nomeados. Você pode estar mais familiarizado com os termos Tema pai e Tema filho .
Supondo que você tenha criado um Tema filho com o tema TwentyTen padrão que vem com o WordPress como Tema pai e o tenha chamado de "Meu tema personalizado" e colocado no /wp-content/themes/my-custom-theme
diretório, você ativaria seu tema usando esta chamada:
switch_theme('twentyten', 'my-custom-theme');
Mas e se não for um tema infantil? Isso é fácil, basta passar o slug do diretório / identificador do tema (ou seja, o nome do subdiretório /wp-content/themes
que contém o seu tema) como ambos os parâmetros. Supondo que você deseja ativar o tema Temático por Ian D Stewart, você chama switch_theme()
assim:
switch_theme('thematic', 'thematic');
Pessoalmente, acho um pouco estranho ter que acompanhar os dois detalhes aqui, então escrevi uma função chamada activate_my_theme()
que primeiro verifica para garantir a get_current_theme()
função e, se não, a ativa. Você só precisa dizer o tema filho (também conhecido como "folha de estilo") e descobrir o tema principal para você (também conhecido como "modelo") , capturando os detalhes da get_theme()
função.
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']
);
}
}
Um ponto chave para estar ciente ; a get_theme()
função espera receber o nome do Tema filho, NÃO é o slug do diretório / identificador do tema. (O nome vem da seção "Nome do tema:" no cabeçalho do style.css
arquivo do tema . Felizmente, a get_current_theme()
função retorna o nome também.)
Inspecionando o cabeçalho no style.css
arquivo do tema padrão do WordPress Twenty Ten , vemos que seu nome é de fato '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
*/
Excluindo a publicação "Hello World"
Em seguida, queremos excluir a postagem "Hello World" . Você pode ter visto que o @Rarst nos mostrou como usar a wp_delete_post()
função que é exatamente o que precisamos. Como ele explicou, o segundo parâmetro excluirá totalmente o post, em vez de movê-lo para o lixo, e o primeiro parâmetro é o $post->ID
.
É claro que seria bom poder especificar a lesma em vez da $post->ID
e então decidi encontrar uma maneira de fazer isso. Depois de alguns spelunking, descobri que o WordPress tem uma função chamada infelizmente chamada, get_page_by_path()
que na verdade nos permite procurar qualquer tipo de postagem por sua lesma (infelizmente, ela é chamada porque você pode ignorá-la ao tentar encontrar algo que funcione com outros tipos de postagem 'page'
).
Como passamos get_page_by_path()
a constante definida pelo WordPress, OBJECT
ela retornará para nós uma postagem na forma de um objeto de publicação. Para o terceiro parâmetro que passamos 'post'
para indicar que queríamos que ele procurasse os tipos de post 'post'
. Como get_page_by_path()
retornará o objeto de postagem que precisamos ou retornará null
se nenhuma postagem corresponder à lesma, podemos verificar a existência e fazer uma pesquisa ao mesmo tempo:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
Nota: Poderíamos ter executado o código para excluir todas as postagens no banco de dados, mas, se o tivéssemos, não poderíamos executá-lo novamente depois de adicionarmos as postagens que queremos manter e essa foi uma das restrições de design.
Próximo...
Continuarei adicionando isso à medida que for descobrindo até terminar ou até que alguém ajude.
Create Menus for Custom Pages
? Você quer dizer áreas de menu individuais em algumas páginas ou o quê?