Настройка Wordpress the_title с помощью add_filter

22 авг. 2011 г., 03:39:03
Просмотры: 20.8K
Голосов: 3

Я пытаюсь создать кастомный заголовок 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;
}
0
Все ответы на вопрос 2
4
10

Проблема в том, что вы путаете переменные $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, что вызовет проблемы!

22 авг. 2011 г. 03:46:07
Комментарии

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

shahz shahz
22 авг. 2011 г. 04:46:42

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

shahz shahz
22 авг. 2011 г. 04:55:28

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

tollmanz tollmanz
22 авг. 2011 г. 04:57:47

У вас может быть установлен Yoast; если это так, вам следует посмотреть на add_filter 'wpseo_title'.

Herbert Van-Vliet Herbert Van-Vliet
5 июл. 2018 г. 10:36:57
0

Я считаю, что 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() и т.д.

Помните об этих проверках перед тем, как переопределять заголовки, которые не должны изменяться, или в местах, где это нежелательно.

17 окт. 2023 г. 23:10:09