если заголовок wordpress повторяется, добавьте идентификатор сообщения в заголовок - PullRequest
0 голосов
/ 19 марта 2020

Я хочу, чтобы при создании сообщения проверялся код, если заголовок сообщения дублирован (уже существует), добавьте идентификатор сообщения в заголовок. У меня есть фрагмент кода для добавления идентификатора записи в заголовок, и он отлично работает в php 5.6 и выше

add_filter('title_save_pre','auto_generate_post_title');
function auto_generate_post_title($title) {
   global $post;
   if (isset($post->ID)) {
      if (empty($_POST['post_title']) && 'post' == get_post_type($post->ID)){
         // get the current post ID number
         $id = get_the_ID();
         // add ID number with order strong
         $title = $title .' - ' .$id;} }
   return $title; 
}

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

скажем, у меня есть пост с таким названием "лучший бутерброд", и когда я хочу создать новый пост с точным названием снова "лучший бутерброд" и идентификатором поста 216, новый заголовок должен быть: " лучший бутерброд - 216 "

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Установите переменную с названием заголовка, в этом случае я получаю на POST следующее, которое является заголовком, который я хочу проверить:

$_POST['portfolioTitle'] 

Затем в запросе для всего вашего сообщения вы делаете

if ( get_page_by_title( $_POST['portfolioTitle'] ) === null ) {
0 голосов
/ 19 марта 2020

Это проверит существующие записи и добавит идентификатор записи в конце, только если заголовок опубликован.

add_filter('title_save_pre','he_auto_generate_post_title');
function he_auto_generate_post_title($title) {
   global $post, $wpdb;  

    if (isset($post->ID) && $post->post_type == 'post'){
        // create array from the title
        $new_title = explode('-', $post->post_title);
        //query database to find all published posts with same title in beginning.  
        $existing_titles = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_title LIKE '{$title}%' and post_status = 'publish'");
        foreach ($existing_titles as $existing_title){
            // loop through results and find a match
            $check = explode('-', $existing_title->post_title);
            if ($check[0] == $title) {
                // add ID number with order strong
                $title = $new_title[0] .' - ' .$post->ID;
            }
        }
    } 
   return $title; 
}
0 голосов
/ 19 марта 2020

Вы можете получить все сообщения с заголовком, используя это:

$numberOfPostsWithThisTitle = count(get_posts([ "post_type" => "post", "s" => $title] );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...