Вступление в игру немного запоздало, но я столкнулся с той же проблемой с Pretty Links Lite.Чем больше «симпатичных ссылок» вы добавляете, тем больше это замедляет работу вашего сайта, даже с агрессивным кэшированием.
Мое решение состояло в том, чтобы создать пользовательский тип записи под названием redirect
и использовать некоторые настраиваемые поля (хотя я использую Advanced CustomПлагин Fields для более элегантного бэкэнда).Затем просто добавьте быструю функцию, которая подключается к template_redirect
, которая проверяет ваш тип записи.
Единственным недостатком является то, что вам нужно назначить слаг для вашего CPT, но вы можете легко настроить его в функции регистра..
Вот мой код:
function register_redirect_cpt {
register_post_type('redirect', array(
'label' => 'redirects',
'labels' => array(
'name' => 'Redirects',
'singular_name' => 'Redirect',
'add_new' => 'Add Redirect',
'add_new_item' => 'Add New Redirect',
'edit_item' => 'Edit Redirect',
'new_item' => 'New Redirect',
'view_item' => 'View Redirect',
'search_items' => 'Search Redirects',
'not_found' => 'No Redirects found',
'not_found_in_trash' => 'No Redirects found in Trash'
),
'description' => 'Pretty Redirects',
'public' => true,
'menu_position' => 5,
'supports' => array(
'title',
'author',
'custom-fields' // This is important!!!
),
'exclude_from_search' => true,
'has_archive' => false,
'query_var' => true,
'rewrite' => array(
'slug' => 'redirect',
'with_front' => false
)
));
}
add_action('init', 'register_redirect_cpt') ;
Как я уже говорил, вы можете использовать настраиваемые поля или плагин ACF для настройки нескольких метабоксов - 1 для публичной ссылки и другой дляистинный пункт назначения.Я предполагаю, что вы используете ванильные настраиваемые поля.Затем вставьте это в ваш functions.php
или файл функций темы:
function redirect_for_cpt() {
if (!is_singular('redirect')) // If it's not a redirect then don't redirect
return;
global $wp_query;
$redirect = isset($wp_query->post->ID) ? get_post_meta($wp_query->post->ID, '_true_destination', true) : home_url(); // If you forget to set a redirect then send visitors to the home page; at least we avoid 404s this way!
wp_redirect(esc_url_raw($redirect), 302);
exit;
}
add_action('template_redirect', 'redirect_for_cpt');