Настройка Wordpress the_title с помощью add_filter
Я пытаюсь создать кастомный заголовок WordPress для записей, созданных под пользовательским типом записи. По сути, это журнал изменений версий приложения. Я хочу вводить только номер версии в поле заголовка, а вывод должен быть стандартизирован с добавлением строки.
Мой пользовательский тип записи - 'custom_version', и желаемый вывод заголовка: "Application has been updated to version ".
Я понял, что этого можно достичь с помощью add_filter, и несколько дней пробовал работать с этим кодом, но я не профессиональный PHP-разработчик, поэтому помощь будет очень кстати :) Вот код:
add_filter('the_title', 'new_title');
function new_title($title) {
global $post, $post_ID;
$title['custom_version'] = 'Application has been updated to v'.$title;
return $title;
}

Проблема в том, что вы путаете переменные $title
. $title
— это параметр, передаваемый в функцию new_title
, но затем вы используете его как массив: $title['custom_version']
. Попробуйте так:
add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
if('custom_version' == get_post_type($id))
$title = 'Приложение обновлено до версии v'.$title;
return $title;
}
Также настоятельно рекомендую добавлять уникальный префикс к вашей функции, потому что может возникнуть конфликт, если другой плагин или тема использует функцию с именем new_title
, что вызовет проблемы!

Спасибо за ответ, tollmanz, я попробовал ваш код, но проблема в том, что он заменяет ВСЕ заголовки, включая заголовки страниц.. Вот ссылка на пример, где это делается: http://www.titaniumtrack.com/changelog/titanium-backup/3-0-6

Я на самом деле пытаюсь добавить этот фильтр только для пользовательских типов записей с идентификатором "custom_version"..

Отредактировано... Я проверяю, что post_ID связан с записью типа "custom_version", прежде чем изменять заголовок. Извините за первоначальную версию. Я не осознавал, что это нужно только для одного CPT.

Я считаю, что WooCommerce хорошо справился с демонстрацией возможных способов проверки, действительно ли вы хотите переопределить заголовок с помощью фильтра the_title
.
Иногда вы можете изменить заголовок, который будет отображаться в списке категорий, но в других местах этого делать не стоит.
Вот как они это реализовали:
# plugins/woocommerce/includes/wc-page-functions.php
function wc_page_endpoint_title( $title ) {
global $wp_query;
if ( ! is_null( $wp_query ) && ! is_admin() && is_main_query() && in_the_loop() && is_page() && is_wc_endpoint_url() ) {
$endpoint = WC()->query->get_current_endpoint();
$action = isset( $_GET['action'] ) ? sanitize_text_field( wp_unslash( $_GET['action'] ) ) : '';
$endpoint_title = WC()->query->get_endpoint_title( $endpoint, $action );
$title = $endpoint_title ? $endpoint_title : $title;
remove_filter( 'the_title', 'wc_page_endpoint_title' );
}
return $title;
}
add_filter( 'the_title', 'wc_page_endpoint_title' );
Важнее, чем перезапись заголовка, являются методы и проверки, которые они выполняют...
! is_admin() && is_main_query() && in_the_loop() && is_page() && is_wc_endpoint_url()
и т.д.
Помните об этих проверках перед тем, как переопределять заголовки, которые не должны изменяться, или в местах, где это нежелательно.
