用代码实现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

相关推荐

  • wordpress程序发布文章自动把远程图片保存到本地的两个方法

    目前个人建站使用wordpress程序的朋友非常的多,因为wp确实非常简单易用,非常傻瓜化,即使一个不太懂代码的人也可以利用wordpress轻松搭建博客一样属于自己的网站。 今天和大家分享wordpress发布文章自动把远程图片保存到本地的两个方法。一般情况下,并不是所有网站都会全部用原创,有时看到好文章想转载,但是对方网站可能对图片进了防盗链,我们如果挨…

    2021年8月12日
    626
  • WordPress “正在执行例行维护,请一分钟后回来。”的解决方法

    在 WordPress 后台升级插件的,WordPress 系统进入维护(Maintenance)状态,这个时候访问任何页面都会出现:“正在执行例行维护,请一分钟后回来。”,但是有时候因为系统和服务器的问题,一直显示“正在执行例行维护,请一分钟后回来。”,后台也进不去。 如图所示: 这个时候,我们可以使用 FTP 进入网站的根目录,删除 .maintenan…

    2022年3月19日
    535
  • 宝塔面板快速安装fileinfo组件支持方法

    有些程序的特殊性,需要各种组件支持才可以安装。前几天一个网友提到在使用宝塔面板,问如何安装fileinfo扩展支持。在这篇文章中正好有帮助这个网友解决在宝塔面板中安装fileinfo的过程,所以记录下来,以便有需要的同学看到之后参考使用。 第一、准备安装 登入当前宝塔面板,进入当前需要安装fileinfo扩展的PHP目录管理。 第二、安装扩展 在安装扩展菜单…

    2021年8月12日
    557
  • 织梦DedeCMS用来建立博客网站需要授权吗?有版权问题吗

    织梦DedeCMS内容管理系统以简单、实用、开源而闻名,而织梦DedeCMS分为两个版本:一是免费版,适合很多个人站长用来建立各种非营利类型网站;二是商业授权版,适合政府单位、教育机构、协会团体、企业、以营利为目的的站点使用。这两个版本的版权说明对比如下表所示: 截图来自DedeCMS官网 而且根据《DedeCMS最终用户授权协议》许可的权利之一就是“您可以…

    2021年9月27日
    437
  • WordPress程序自动设置标签Tag自动内链无插件实现办法

    一直有使用WP keyword Link Plugin插件,但是发现这个插件已经好久没有更新,好像目前在平台中已经找不到。所以准备替换掉这个插件。类似的WordPress插件还是有很多的,比如Keywords to Links Converter、Auto Tag Links等都可以实现。 本着少用插件,能不用插件就不用的策略,所以准备还是无插件实现。 //…

    2021年8月18日
    768