wordpress ajax 调用wpdb_WordPress建站教程纯代码实现wordpress防止发布文章出现标题重复,自动检测重复标题文章...

通过WordPress函数及AJAX技术实现发布文章时检查标题是否重复,并在重复时阻止发布,同时给出解决提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WordPress代码实现防止发表重复标题的文章,如果对你有帮助就看看吧。

其实所有的插件这些的就等于放到function.php的代码片段。function.php里面的插件集成出来也可以做成一个插件,反过来插件也可以集成到function.php里面,插件的好处就是方便管理,但也添加了静态的资源请求,所以就导致了,插件越多也会导致网站卡顿的情况,扯得有点远了,直接上代码。

主要修改的地方是:将 js 转为 script 标签内容,等于消除一个请求,翻译也省了,换成中文。 将下面代码复制粘贴到你主题的 functions.php 文件里面,这个不用解释了吧?

70b7a4a9f818f5453e4de9b1a336b0de.png

实例 HTML 代码:

  1. /**
  2. * 发表文章时禁止与已存在的标题相重复
  3. * Modify from Plugin: Duplicate Title Validate
  4. * Description: this plugin help , not allow publish Duplicate Title .
  5. * Author: hasan movahed
  6. * Reviser: INLOJV
  7. * Version: 1.0
  8. */
  9. // 发表文章页面,前端抓取标题并使用AJAX发送请求
  10. add_action( ‘admin_print_footer_scripts’, ‘duplicate_titles_enqueue_scripts’, 100 );
  11. function duplicate_titles_enqueue_scripts() {
  12. ?>
  13. <script>
  14. jQuery(function($){
  15. function checkTitleAjax(title, id,post_type) {
  16. var data = {
  17. action: ‘title_checks’,
  18. post_title: title,
  19. post_type: post_type,
  20. post_id: id
  21. };
  22. $.post(ajaxurl, data, function(response) {
  23. $(‘#message’).remove();
  24. $(‘#poststuff’).prepend(‘<div id=“message” class=”updated below-h2 fade ”><p>’+response+'</p></div>’);
  25. });
  26. };
  27. $(‘#title’).change(function() {
  28. var title = $(‘#title’).val();
  29. var id = $(‘#post_ID’).val();
  30. var post_type = $(‘#post_type’).val();
  31. checkTitleAjax(title, id,post_type);
  32. });
  33. });
  34. </script>
  35. <?php
  36. }
  37. // 接收前端ajax参数
  38. add_action(‘wp_ajax_title_checks’, ‘duplicate_title_checks_callback’);
  39. function duplicate_title_checks_callback(){
  40. global $wpdb;
  41. $title = $_POST[‘post_title’];
  42. $post_id = $_POST[‘post_id’];
  43. $titles = “SELECT post_title FROM $wpdb->posts WHERE post_status = ‘publish’ AND post_type = ‘post’
  44. AND post_title = ‘{$title}’ AND ID != {$post_id} “;
  45. $results = $wpdb->get_results($titles);
  46. if($results) {
  47. echo “<span style=’color:red’>“. _( ‘此标题已存在,请换一个标题!’ , ” ) .” </span>“;
  48. } else {
  49. echo ‘<span style=”color:green“>’._(‘恭喜,此标题未与其他文章标题重复!’ , ”).'</span>’;
  50. }
  51. die();
  52. }
  53. // 检测后端标题并且避免同名文章更新草稿
  54. add_action( ‘publish_post’,’duplicate_titles_wallfa_bc’ ) ;
  55. function duplicate_titles_wallfa_bc( $post ){
  56. global $wpdb ;
  57. $title = $_POST[‘post_title’] ;
  58. $post_id = $post ;
  59. $wtitles = “SELECT post_title FROM $wpdb->posts WHERE post_status = ‘publish’ AND post_type = ‘post’
  60. AND post_title = ‘{$title}’ AND ID != {$post_id} ” ;
  61. $wresults = $wpdb->get_results( $wtitles ) ;
  62. if ( $wresults ){
  63. $wpdb->update( $wpdb->posts, array( ‘post_status’ =>
  64. ‘draft’ ), array( ‘ID’ => $post ) ) ;
  65. $arr_params = array( ‘message’ => ’10’, ‘wallfaerror’ => ‘1’ ) ;
  66. $location = add_query_arg( $arr_params , get_edit_post_link( $post , ‘url’ ) ) ;
  67. wp_redirect( $location ) ;
  68. exit ;
  69. }
  70. }
  71. /// 文章提交更新后的提示
  72. add_action( ‘admin_notices’, ‘not_published_error_notice’ );
  73. function not_published_error_notice() {
  74. if(isset($_GET[‘wallfaerror’]) == 1 ){
  75. ?>
  76. <div class=”updated”>
  77. <p style=’color:red’ ><?php _e(‘貌似已经存在相同标题的文章,若您使用了文章别名作为固定链接,则可以通过修改本文的固定链接来使标题不再重复!’ , ”) ?></p>
  78. </div>
  79. <?php
  80. }
  81. }
  82. // 禁用自动保存
  83. add_action( ‘wp_print_scripts’, ‘disable_autosave’ ) ;
  84. function disable_autosave(){
  85. wp_deregister_script( ‘autosave’ ) ;
  86. }

本文来自资源网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值