Изменение порядка получения заголовка в WooCommerce

#php #wordpress #woocommerce #endpoint #page-title

#php #wordpress #woocommerce #конечная точка #страница-заголовок

Вопрос:

У меня есть следующий код, который работает и изменяет заголовок страницы «полученный заказ»:

 add_filter( 'the_title', 'woo_title_order_received', 10, 2 );

function woo_title_order_received( $title, $id ) {
    if ( function_exists( 'is_order_received_page' ) amp;amp; 
         is_order_received_page() amp;amp; get_the_ID() === $id ) {
        $title = "Thank you, good luck!";
    }
    return $title;
}
 

Однако это вызывает фатальную ошибку на странице магазина из-за Too few arguments to function woo_title_order_received() . После проверки в Интернете я обнаружил, что the_title это неверно, и так и должно быть get_the_title . Если я изменю его на это, фатальная ошибка исчезнет, но она больше не изменит заголовок на странице «Полученный заказ».

Ни один из других фрагментов, которые я нашел в Интернете, не сработал, и я не понимаю, почему вышеуказанное останавливает работу страниц магазина. Есть идеи?

Ответ №1:

Попробуйте установить $id аргумент равным null (полезно, когда он не определен):

 add_filter( 'the_title', 'woo_title_order_received', 10, 2 );
function woo_title_order_received( $title, $id = null ) {
    if ( function_exists( 'is_order_received_page' ) amp;amp;
         is_order_received_page() amp;amp; get_the_ID() === $id ) {
        $title = "Thank you, good luck!";
    }
    return $title;
}
 

Это может сработать…

Ответ №2:

Понятия не имею, почему вы должны использовать the_title WordPress-хук с несколькими условиями if, в то время как в WooCommerce есть специальные хуки для этого.

'woocommerce_endpoint_' . $endpoint . '_title' Хук фильтра позволяет изменить Order received заголовок.

Таким образом, вы получаете:

 /**
 * @param string $title Default title.
 * @param string $endpoint Endpoint key.
 * @param string $action Optional action or variation within the endpoint.
 */
function filter_woocommerce_endpoint_order_received_title( $title, $endpoint, $action ) {   
    $title = __( 'Thank you, good luck!', 'woocommerce' );
 
    return $title;
}
add_filter( 'woocommerce_endpoint_order-received_title', 'filter_woocommerce_endpoint_order_received_title', 10, 3 );