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

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

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

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

代码语言:javascript
复制
直接看代码把:
/**
  • 发表文章时禁止与已存在的标题相重复

  • Modify from Plugin: Duplicate Title Validate

  • Description: this plugin help , not allow publish Duplicate Title .

  • Author: hasan movahed

  • Reviser: INLOJV

  • Version: 1.0

*/
// 发表文章页面,前端抓取标题并使用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: &#39;title_checks&#39;,

        post_title: title,

        post_type: post_type,

        post_id: id

    };

    $.post(ajaxurl, data, function(response) {

        $(&#39;#message&#39;).remove();

        $(&#39;#poststuff&#39;).prepend(&#39;&lt;div id=\&#34;message\&#34; class=\&#34;updated below-h2 fade \&#34;&gt;&lt;p&gt;&#39;+response+&#39;&lt;/p&gt;&lt;/div&gt;&#39;);

    }); 

};

$(&#39;#title&#39;).change(function() {

    var title = $(&#39;#title&#39;).val();

    var id = $(&#39;#post_ID&#39;).val();

    var post_type = $(&#39;#post_type&#39;).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[&#39;post_title&#39;];

$post_id = $_POST[&#39;post_id&#39;]; 

$titles = &#34;SELECT post_title FROM $wpdb-&gt;posts WHERE post_status = &#39;publish&#39; AND post_type = &#39;post&#39;

            AND post_title = &#39;{$title}&#39; AND ID != {$post_id} &#34;; 

$results = $wpdb-&gt;get_results($titles); 

if($results) {

    echo &#34;&lt;span style=&#39;color:red&#39;&gt;&#34;. _( &#39;此标题已存在,请换一个标题!&#39; , &#39;&#39; ) .&#34; &lt;/span&gt;&#34;;

} else {

    echo &#39;&lt;span style=&#34;color:green&#34;&gt;&#39;._(&#39;恭喜,此标题未与其他文章标题重复!&#39; , &#39;&#39;).&#39;&lt;/span&gt;&#39;;

} 

die();

}

// 检测后端标题并且避免同名文章更新草稿

add_action( 'publish_post','duplicate_titles_wallfa_bc' ) ;

function duplicate_titles_wallfa_bc( $post ){

global $wpdb ;

$title = $_POST[&#39;post_title&#39;] ;

$post_id = $post ; 

$wtitles = &#34;SELECT post_title FROM $wpdb-&gt;posts WHERE post_status = &#39;publish&#39; AND post_type = &#39;post&#39;

                    AND post_title = &#39;{$title}&#39; AND ID != {$post_id} &#34; ; 

$wresults = $wpdb-&gt;get_results( $wtitles ) ; 

if ( $wresults ){

    $wpdb-&gt;update( $wpdb-&gt;posts, array( &#39;post_status&#39; =&gt;

            &#39;draft&#39; ), array( &#39;ID&#39; =&gt; $post ) ) ;

    $arr_params = array( &#39;message&#39; =&gt; &#39;10&#39;, &#39;wallfaerror&#39; =&gt; &#39;1&#39; )  ;      

    $location = add_query_arg( $arr_params , get_edit_post_link( $post , &#39;url&#39; ) ) ;

    wp_redirect( $location  ) ;        

    exit ;

}

}

/// 文章提交更新后的提示

add_action( 'admin_notices', 'not_published_error_notice' );

function not_published_error_notice() {

if(isset($_GET[&#39;wallfaerror&#39;]) == 1 ){

   ?&gt;

   &lt;div class=&#34;updated&#34;&gt;

   &lt;p style=&#39;color:red&#39; &gt;&lt;?php _e(&#39;貌似已经存在相同标题的文章,若您使用了文章别名作为固定链接,则可以通过修改本文的固定链接来使标题不再重复!&#39; , &#39;&#39;) ?&gt;&lt;/p&gt;

   &lt;/div&gt;

   &lt;?php

}

}

// 禁用自动保存

add_action( 'wp_print_scripts', 'disable_autosave' ) ;

function disable_autosave(){

wp_deregister_script( &#39;autosave&#39; ) ;

}