Показать похожие заголовки сообщений (похожие на Stack Exchange)

Мне очень нравится, как сайты Stack Exchange обрабатывают сообщения, где после того, как вы закончите вводить заголовок, он будет отображать похожие заголовки. Как я могу реализовать что-то подобное в моей установке WordPress?

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

Solutions Collecting From Web of "Показать похожие заголовки сообщений (похожие на Stack Exchange)"

Это даст вам большую часть пути, но фактический поиск не идеален. Было бы здорово, если бы кто-то, кто знает больше о $ wpdb, может помочь получить лучший результат.

Если это мой первоначальный заголовок: SOPA мертв, woot!

Тогда просто название «SOPA» найдет его, так как будет просто титул «мертв», но не «Ding dong, ведьма мертва» или «SOPA – плохая идея».

Тем не менее, основная предпосылка – кнопка добавляется в «Проверить заголовок», а при нажатии заголовок отправляется с помощью jQuery и обрабатывается через AJAX, чтобы возвращать соответствующие заголовки, исключая текущую запись. Если вы можете принять это и изменить его, чтобы вернуть лучшие матчи, пожалуйста, поделитесь!

Вот базовый код плагина, за которым следует jQuery, который должен быть включен в вашу папку плагина в файле duptitles.js

/* Plugin Name: Duplicate Titles Check Description: Prevent user's using similar post titles. Version: 1.0 Author: 5t3ph Author URI: http://stephscharf.me */ //jQuery to send AJAX request - only available on the post editing page function dup_titles_enqueue_scripts( $hook ) { if( !in_array( $hook, array( 'post.php', 'post-new.php' ) ) ) return; wp_enqueue_script( 'duptitles', plugins_url( '/duptitles.js', __FILE__ ), array( 'jquery' ) ); } add_action( 'admin_enqueue_scripts', 'dup_titles_enqueue_scripts', 2000 ); // Invoke baked-in WP ajax goodness // Codex: http://codex.wordpress.org/AJAX_in_Plugins add_action('wp_ajax_title_check', 'title_check_callback'); function title_check_callback() { function title_check() { $title = $_POST['post_title']; $post_id = $_POST['post_id']; global $wpdb; $sim_titles = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_title LIKE '%{$title}%' AND ID != {$post_id}"; $sim_results = $wpdb->get_results($sim_titles); if($sim_results) { $titles = '<ul>'; foreach ( $sim_results as $the_title ) { $titles .= '<li>'.$the_title->post_title.'</li>'; } $titles .= '</ul>'; return $titles; } else { return '<p>This title is unique</p>'; } } echo title_check(); die(); } 

Начать jQuery для duptitles.js

 jQuery(document).ready(function($){ // Post function function checkTitle(title, id) { var data = { action: 'title_check', post_title: title, post_id: id }; //var ajaxurl = 'wp-admin/admin-ajax.php'; $.post(ajaxurl, data, function(response) { $('#message').remove(); $('#poststuff').prepend('<div id=\"message\" class=\"updated fade\"><p>'+response+'</p></div>'); }); }; // Add button to "Check Titles" below title field in post editor $('#edit-slug-box').append('<span id="check-title-btn"><a class="button" href="#">Check Title</a></span>'); // Click function to initiate post function $('#check-title-btn a').click(function() { var title = $('#title').val(); var id = $('#post_ID').val(); checkTitle(title, id); }); });