Intereting Posts

Изменение пули при создании почты

В настоящее время я использую Post name для структуры permalink. Я хочу добавить текст из поля в конце постоянной ссылки. Есть ли крючок для создания постоянной ссылки, когда публикуется Post ?

В моем случае я использую Advanced Custom Fields и у каждого сообщения есть заголовок и субтитры. В настоящее время постоянная ссылка есть /title/ но я хотел быть /title-subtitle/ .

Изменить: похоже на этот предыдущий вопрос , за исключением того, что я хочу сделать это только для создания почты, а не для будущих пост-изданий, так как это изменит URL-адрес сообщения, которое является катастрофой для SEO.

Вот что я сделал для реализации этого:

 function slug_save_post_callback( $post_ID, $post, $update ) { // allow 'publish', 'draft', 'future' if ($post->post_type != 'post' || $post->post_status == 'auto-draft') return; // only change slug when the post is created (both dates are equal) if ($post->post_date_gmt != $post->post_modified_gmt) return; // use title, since $post->post_name might have unique numbers added $new_slug = sanitize_title( $post->post_title, $post_ID ); $subtitle = sanitize_title( get_field( 'subtitle', $post_ID ), '' ); if (empty( $subtitle ) || strpos( $new_slug, $subtitle ) !== false) return; // No subtitle or already in slug $new_slug .= '-' . $subtitle; if ($new_slug == $post->post_name) return; // already set // unhook this function to prevent infinite looping remove_action( 'save_post', 'slug_save_post_callback', 10, 3 ); // update the post slug (WP handles unique post slug) wp_update_post( array( 'ID' => $post_ID, 'post_name' => $new_slug )); // re-hook this function add_action( 'save_post', 'slug_save_post_callback', 10, 3 ); } add_action( 'save_post', 'slug_save_post_callback', 10, 3 ); 

Он генерирует и обновляет slug . Предыдущий slug, сгенерированный WP, нельзя использовать повторно, поскольку он может иметь уникальные номера, если заголовок / slug уже использовался в другом сообщении. Итак, я санирую название. Затем wp_update_post гарантирует отсутствие дубликатов для нового wp_unique_post_slug с помощью wp_unique_post_slug .

Единственный способ, который я мог найти, только для публикации, это сравнить создание и время изменения. Они равны только при создании сообщения. Параметр $update бесполезен, так как это true для публикации.

в вашем файле functions.php, вы должны иметь возможность выполнить желаемую функциональность примерно так:

 function adjust_permalinks() { global $wp_rewrite; $title = get_field( 'title_field' ); $subtitle = get_field( 'sub_title_field' ); $wp_rewrite->set_permalink_structure( $title . '-' . $subtitle ); $wp_rewrite->flush_rules(); } add_action('init', 'adjust_permalinks'); 

это установит вашу структуру permalink, чтобы всегда использовать заголовок $ title & $