Получить ID записи с помощью ссылки вставки/редактирования

Вопрос или проблема

Привет, я хочу получить ID поста из выбранного поста в кнопке вставки/редактирования ссылки.

Я обычно делал бы так:

<a 
    data-id="<?php echo $post->ID; ?>" 
    href="https://wordpress.stackexchange.com/questions/256062/<?php the_permalink();?>">
    Ссылка на страницу образца
</a>

введите описание изображения здесь

Но всякий раз, когда пользователь добавляет ссылки из редактора контента tinyMCE, он получает лишь постоянную ссылку, я не знаю, как подключиться. Мог бы кто-нибудь указать мне правильное направление?

Правка Я хотел бы избежать использования плагина. Но это то, что мне нужно… идеальнее всего без нагроможденного [короткого кода]
введите описание изображения здесь

Это не точный ответ на ваш вопрос (подключение к функциональности вставки/редактирования ссылки), но возможно альтернативный метод, который может достичь той же цели (ввод постоянной ссылки, вывод ID поста):

https://codex.wordpress.org/Function_Reference/url_to_postid

Ответ или решение

Для получения ID поста при использовании кнопки "вставить/изменить ссылку" в редакторе TinyMCE в WordPress, вам потребуется внести некоторые изменения в используемый вами JavaScript и PHP-код. Ниже я опишу, как можно реализовать это без использования плагина, сохраняя легковесность и производительность.

1. Понимание проблемы

Когда вы добавляете ссылку через TinyMCE, стандартное поведение заключается в том, что вставляется ссылка (перmalink), но не сам ID поста. Чтобы достичь желаемого результата, необходимо захватить ID выбранного поста в процессе вставки ссылки.

2. Настройка Windows для передачи Post ID

Для начала, внесем изменения в скрипты, обрабатывающие процесс вставки ссылки из редактора.

a. Добавление пользовательского JavaScript к TinyMCE

Добавим пользовательский JavaScript в административную панель WordPress. Это позволит перехватить событие вставки ссылки и сохранить ID поста.

function custom_tinymce_scripts() {
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            tinymce.on('PostLinkInsert', function(e) {
                const postId = $('#post_id_field').val(); // or any method to get the post ID
                const postLink = e.link;
                const fullLink = postLink + '?id=' + postId; // добавляем ID в ссылку

                // Вставляем ссылку с ID
                tinyMCE.activeEditor.execCommand('mceInsertContent', false, '<a href="' + fullLink + '">' + postLink + '</a>');
            });

            // Здесь мы можем прописать событие, которое будет вызываться при нажатии на кнопку
            $('#insert-link-button').on('click', function() {
                const selectedLink = tinyMCE.activeEditor.getContent();
                // передача ссылки на обработчик
                tinymce.triggerSave();
                tinymce.execCommand('PostLinkInsert', false, { link: selectedLink });
            });
        });
    </script>
    <?php
}
add_action('admin_footer', 'custom_tinymce_scripts');

3. Извлечение Post ID при создании ссылки

Теперь, когда у нас есть пользовательский JavaScript, следует настроить логику, которая будет определять, какой именно пост выбран, и каким образом его ID должно быть получено.

4. Получение Post ID на стороне PHP

Вы можете использовать следующий код для получения ID поста, если его посты уже существуют в контексте редактируемого материала.

function get_post_id_script() {
    ?>
    <script type="text/javascript">
        let postId = <?php echo get_the_ID(); ?>; // Получаем ID текущего поста
        document.getElementById('post_id_field').value = postId; // Записываем в скрытое поле
    </script>
    <?php
}
add_action('edit_form_after_title', 'get_post_id_script');

5. Заключение

Теперь, когда пользователь нажимает на кнопку "вставить ссылку", ID поста будет автоматически добавлен к ссылке в качестве параметра. Это выполнение обеспечивает эффективное обновление с минимальным воздействием на производительность системы и без использования дополнительных плагинов.

Таким образом, вы сможете внедрить функциональность, которая соответствует вашим требованиям, и работать с ID поста напрямую на уровне редактора контента WordPress.

Оцените материал
Добавить комментарий

Капча загружается...