Многосайтовая сеть: Как программно изменить структуру постоянных ссылок в новых блогах


У меня есть многоузловая сеть поддоменов. Я внедрил систему для программного создания новых поддоменов, просто заполнив форму.

Теперь у меня есть необходимость: при создании нового блога я хотел бы установить для его структуры постоянных ссылок значение /postname/.

Я пробовал эти решения:

Как установить структуру постоянных ссылок с помощью functions.php

function set_default_permalink_for_new_blogs($blog_id) 
{
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action('wpmu_activate_blog', 'set_default_permalink_for_new_blogs');

Я добавил этот фрагмент в functions.php темы, используемой для основного сайта, где вышеупомянутая система такова. Это просто не работает.

Как программно заставить Пользовательские постоянные ссылки работать с Моей темой?

function change_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}
add_action('init', 'change_permalinks');

У меня есть некоторые проблемы с этим фрагментом: я не думаю, что было бы хорошей идеей запускать перезапись при каждом "инициализации" (также кто-то еще выразил сомнение по этому поводу в комментариях); во-вторых, этот фрагмент должен быть размещен в теме по умолчанию новых блогов - но что, если я захочу изменить тему по умолчанию в будущем?

Спасибо вам очень много для каждого предложения,

Марко

Author: Marco Panichi, 2017-06-28

2 answers

С помощью "mu-плагинов" решение...

add_action( 'wpmu_new_blog', function( $blog_id ){

switch_to_blog( $blog_id );
global $wp_rewrite;
$wp_rewrite->set_permalink_structure('/%postname%/');
$wp_rewrite->flush_rules();
restore_current_blog();

}, 10 );
 3
Author: José Machado, 2018-01-09 17:48:39

Вы должны иметь возможность создать mu-плагин (обязательный плагин), который срабатывает на крючке activate_blog. Что-то вроде этого должно помочь вам начать движение в правильном направлении:

<?php
/* Plugin name: WPSE Permalink Setter
Description: Sets permalink structure for each blog activation
*/
add_action('activate_blog', 'wpse_271662_set_permalinks');
function wpse_271662_set_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}
?>

Поскольку код запускается только при создании нового сайта (activate_blog), это предотвращает проблемы с производительностью, связанные с запуском на каждом init, и он не зависит от темы. Конечно, теоретически администраторы сайта могли бы изменить структуру постоянной ссылки позже, но это дало бы им чистую установку с постоянной ссылкой структура, которую вы хотите, если только они не будут с ней возиться.

Поместите этот файл непосредственно в /wp-content/mu-plugins/ (без вложенной папки, как обычные плагины), чтобы он запускался автоматически, если файл не будет удален.

 1
Author: WebElaine, 2017-06-28 19:33:36