用代码实现WordPress防止发表重复标题的文章

其实所有插件后端代码都等同于加入到 functions.php 的代码片段,functions.php 里的代码片段可以做成插件,那么反过来插件自然也可以集成到 functions.php 里面。插件主要是方便管理,但同时也增加了静态资源请求数,如果你知道怎么处理这些请求,其实用不用插件也知道该如何优化网站 —— 不啰嗦了。 下面老文笔记就直接贴上代码版的吧。

/**
* 发表文章时禁止与已存在的标题相重复
* Modify from Plugin: Duplicate Title Validate
* Description: this plugin help , not allow publish Duplicate Title .
* Author: hasan movahed
* Reviser: INLOJV
* Version: 1.0
* Author URI: http://www.wallfa.com
* Reviser URI: http://www.inlojv.com
*/
// 发表文章页面,前端抓取标题并使用AJAX发送请求
add_action( 'admin_print_footer_scripts', 'duplicate_titles_enqueue_scripts', 100 );
function duplicate_titles_enqueue_scripts() {
?>
<script>
jQuery(function($){
function checkTitleAjax(title, id,post_type) {
var data = {
action: 'title_checks',
post_title: title,
post_type: post_type,
post_id: id
};
$.post(ajaxurl, data, function(response) {
$('#message').remove();
$('#poststuff').prepend('<div id=\"message\" class=\"updated below-h2 fade \"><p>'+response+'</p></div>');
});
};
$('#title').change(function() {
var title = $('#title').val();
var id = $('#post_ID').val();
var post_type = $('#post_type').val();
checkTitleAjax(title, id,post_type);
});

});
</script>
<?php
}

// 接收前端ajax参数
add_action('wp_ajax_title_checks', 'duplicate_title_checks_callback');
function duplicate_title_checks_callback(){
global $wpdb;
$title = $_POST['post_title'];
$post_id = $_POST['post_id'];
$titles = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'
AND post_title = '{$title}' AND ID != {$post_id} ";
$results = $wpdb->get_results($titles);
if($results) {
echo "<span style='color:red'>". _( '此标题已存在,请换一个标题!' , '' ) ." </span>";
} else {
echo '<span style="color:green">'._('恭喜,此标题未与其他文章标题重复!' , '').'</span>';
}
die();
}

// 检测后端标题并且避免同名文章更新草稿
add_action( 'publish_post','duplicate_titles_wallfa_bc' ) ;
function duplicate_titles_wallfa_bc( $post ){
global $wpdb ;
$title = $_POST['post_title'] ;
$post_id = $post ;
$wtitles = "SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'
AND post_title = '{$title}' AND ID != {$post_id} " ;
$wresults = $wpdb->get_results( $wtitles ) ;
if ( $wresults ){
$wpdb->update( $wpdb->posts, array( 'post_status' =>
'draft' ), array( 'ID' => $post ) ) ;
$arr_params = array( 'message' => '10', 'wallfaerror' => '1' ) ;
$location = add_query_arg( $arr_params , get_edit_post_link( $post , 'url' ) ) ;
wp_redirect( $location ) ;
exit ;
}
}

/// 文章提交更新后的提示
add_action( 'admin_notices', 'not_published_error_notice' );
function not_published_error_notice() {
if(isset($_GET['wallfaerror']) == 1 ){
?>
<div class="updated">
<p style='color:red' ><?php _e('貌似已经存在相同标题的文章,若您使用了文章别名作为固定链接,则可以通过修改本文的固定链接来使标题不再重复!' , '') ?></p>
</div>
<?php
}
}
// 禁用自动保存
add_action( 'wp_print_scripts', 'disable_autosave' ) ;
function disable_autosave(){
wp_deregister_script( 'autosave' ) ;
}

关于用代码实现WordPress防止发表重复标题的文章的相关内容;如有侵权,请联系老文删除。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
老文的头像老文
上一篇 2022年11月27日 下午6:51
下一篇 2022年12月18日 下午2:01

相关推荐

  • 全国各地域名备案审核时间大概多久?下面给大家参考

    备案域名需要多久?每个省份的域名审核时间不同,通信管局一般情况下是20个工作日内审核完毕,实际上快的省份仅需3-5天就会出结果。以下是网友提供的各个省份域名备案审核时间: 安徽省域名备案审核时间:8-13天 北京市域名备案审核时间:14天 福建省域名备案审核时间:7天 甘肃省域名备案审核时间:10天 广东省域名备案审核时间:7天 广西壮族自治区域名备案审核时…

    2022年5月7日
    740
  • WordPress怎么自动发布文章

    WordPress具有定期发布文章的功能。在发布界面中,有一个按钮用于立即发布和编辑文章。单击此处可编辑发布文章的时间。 因此,我们可以设置在特定时间发布文章的时间: 为什么我们需要定期发表文章?定期发表文章有哪些优点和缺点?为什么我们需要使用WordPress的定时发帖功能?对于搜索引擎和用户体验来说,在固定时间发布文章是一种非常好的体验。 因为如果我们网…

    2023年1月4日
    169
  • 网站数据库经常无故暂停的问题排查和解决方案

    遇到一个朋友,估摸着也是才开始学习搭建网站的。而且他心还是比较大的,选择到一台云服务器,然后一骨碌搭建四五个网站。于是出现的故障也随之而来,他这几天网站每天都有好几次出现数据库连接不上的问题,需要重启数据库才可以恢复。 像这种数据库经常无故暂停的问题也是常有的。这个到底是什么问题影响的呢,有没有解决办法。 第一、服务器的利用率 这个同学一台1G内存的服务器,…

    2022年3月26日
    617
  • WordPress密码忘了_管理员密码找回的三种方法

    用WordPress安装完网站后,时间久了难免会碰到密码忘记的情况。管理员账号没有办法通过忘记密码找回功能,所以只能使用另外的方式,本文就介绍三种简单找回WordPress管理员密码的办法。 FTP修改functions.php找回 如果你记得你网站的FTP信息,那么你可以使用FTP软件来修改主题文件夹里面的functions.php文件实现密码修改。 通过…

    2024年8月11日
    266
  • 怎么升级flarum论坛所有的插件?

    最近我要配置一个封禁IP的插件,一直提醒我Flarum的内核版本过低,需要设置1.8.3。   安装插件报错,提醒升级论坛内核版本 而我正好要升级Flarum论坛的所有插件,所以我是按以下步骤进行的: 1.升级前的准备 备份网站数据和数据库。这是非常重要的步骤,以防止在升级过程中发生任何数据丢失。 停用所有安装的第三方插件。特别是那些你自己安装的、…

    2024年7月31日
    172