Embora seja bom ter o recurso de configurações persistentes no núcleo, pode demorar um pouco até que seja realmente aceito. O WordPress 3.5 ainda está muito longe.
Então, vamos aumentar a $_REQUEST
matriz global .
add_action( 'load-edit.php', 'wpse34956_force_excerpt' );
function wpse34956_force_excerpt() {
$_REQUEST['mode'] = 'excerpt';
}
Isso bloqueará os modos, forçando o excerpt
modo o tempo todo, então vamos deixar o usuário decidir, mas mantê-lo persistente usando os metadados do usuário:
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode', $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode', true ) )
$_REQUEST['mode'] = $mode;
}
Você pode interpolar ainda mais, post_type
considerando a $_GET['post_type']
variável quando disponível.
add_action( 'load-edit.php', 'wpse34956_persistent_posts_list_mode' );
function wpse34956_persistent_posts_list_mode() {
// take into account post types that support excerpts
$post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
if ( $post_type && !post_type_supports( $post_type, 'excerpt' ) )
return; // don't care
if ( isset( $_REQUEST['mode'] ) ) {
// save the list mode
update_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, $_REQUEST['mode'] );
return;
}
// retrieve the list mode
if ( $mode = get_user_meta( get_current_user_id(), 'posts_list_mode' . $post_type, true ) )
$_REQUEST['mode'] = $mode;
}
Viola! Modo de lista persistente por tipo de postagem por usuário, sem hacks.
A tela de exibição de postagem alterna da exibição de lista para a exibição de trechos com base no valor do parâmetro "mode" na string de consulta. Se o parâmetro "mode" não estiver definido, o WordPress usará como padrão a exibição em lista.
Infelizmente, esse parâmetro não é filtrável, portanto não há uma maneira fácil de controlá-lo programaticamente.
Então, farei algo que nunca faço ... Vou lhe dizer como hackear o Core para fazer isso funcionar ...
Adicionando um filtro
Abra
/wp-admin/includes/class-wp-posts-list-table.php
e encontre oprepare_items()
método (em torno da linha 81).Na linha 99, o WordPress verifica se o parâmetro "mode" foi ou não definido na solicitação e o usa para definir a
$mode
variável global :Vamos mudar essa linha para filtrar a configuração padrão. Mude esta linha para:
Agora, entre no
functions.php
arquivo do seu tema e adicione o seguinte código:Isso entrará no filtro e retornará o modo de trecho por padrão.
Como minha regra pessoal sobre hackers do Core exige que todos os hacks sejam contribuídos de volta para o projeto (dessa forma, eles podem ser lançados no Core e não mais contar como hack), abri um ticket do Trac para esse aprimoramento e enviei o código acima como um patch. Por favor, avalie o ticket para que ele possa entrar no core para 3.5 (estamos muito atrasados no ciclo para 3.4, mas podemos tentar levar isso adiante para a próxima versão).
fonte
$_REQUEST
mundo todoadd_action( 'edit.php', ... )
e assim por diante , enquanto esperamos que o núcleo adote o patch / proposta?$_REQUEST
objeto. Sinta-se à vontade para postar outra resposta descrevendo como isso pode ser feito.Ok, logo depois de oferecer uma recompensa, vim com a seguinte solução. É o comportamento padrão em todos os aspectos, exceto que ele seleciona a exibição de trechos para qualquer tipo de publicação que você deseja (em vez da exibição de lista padrão).
NOTA: Recomendo a abordagem de Soulseekah, se você não quiser se lembrar da escolha do usuário, poderá incorporar um pouco meu código ao código dele. NOTA 2: Se / quando o patch do EAMann fizer parte do núcleo, obviamente o método dele seria o melhor, pois não exigiria que você percorresse o caminho mais longo. Só não gosto no momento, pois você precisa editar os arquivos principais.
fonte
paged
não é levado em consideração (paginação) + o uso emwp_redirect
vez de cabeçalhos brutos pode ser um pouco "mais limpo", e não tenho certeza da eficiência do redirecionamento. Fora isso parece interessante. Além disso,$_GET['post_type']
pode não estar definido, resultando em um aviso se os erros estiverem ativados. +1 pelo esforço e paciência. Não sabia que a pergunta era tão antiga.$_GET
variáveis. Quanto ao$_GET['post_type']
, honestamente, eu não estava muito preocupado com isso, pois eu apenas exigia que fosse para um tipo de postagem personalizado, que sempre estaria lá. Obviamente, isso pode ser omitido. @EAMann, Você está certo, no entanto, esta foi a melhor solução que eu poderia encontrar. Tentei definir$_GET
parâmetros manualmente , esperando que fosse definido antes de ser lido, mas isso não parecia ser o caso.