Personalizarea Wordpress the_title cu add_filter

22 aug. 2011, 03:39:03
Vizualizări: 20.8K
Voturi: 3

Încerc să creez un titlu personalizat în WordPress pentru postările făcute sub un post type custom. Practic, este un istoric de versiuni pentru o aplicație. Aș dori să introduc doar numărul versiunii în câmpul titlu, iar rezultatul să fie standardizat cu un șir de caractere conform.

Tipul meu de postare custom este 'custom_version' și rezultatul titlului pe care îl doresc este "Aplicația a fost actualizată la versiunea ".

Am înțeles că acest lucru poate fi realizat folosind add_filter și am încercat să modific acest cod de câteva zile, dar nu sunt expert în PHP, așa că orice ajutor este binevenit :) Iată codul:

add_filter('the_title', 'new_title');
function new_title($title) {
    global $post, $post_ID;
    $title['custom_version'] = 'Aplicația a fost actualizată la v'.$title;
    return $title;
}
0
Toate răspunsurile la întrebare 2
4
10

Problema este că amestecați variabilele $title. $title este parametrul transmis funcției new_title, dar apoi îl utilizați ca un array: $title['custom_version']. Încercați acest cod:

add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
    if('custom_version' == get_post_type($id))
        $title = 'Aplicația a fost actualizată la versiunea v'.$title;
    return $title;
}

De asemenea, vă recomand să prefixați funcția dvs. cu un prefix unic, deoarece există riscul ca o altă extensie sau temă să utilizeze o funcție numită new_title, ceea ce poate provoca probleme!

22 aug. 2011 03:46:07
Comentarii

Mulțumesc pentru răspuns, tollmanz, am încercat codul tău, dar problema este că înlocuiește TOATE titlurile, inclusiv cele ale paginilor..Iată o referință unde se face acest lucru: http://www.titaniumtrack.com/changelog/titanium-backup/3-0-6

shahz shahz
22 aug. 2011 04:46:42

De fapt, încerc să adaug acest filtru doar la tipurile de postări personalizate cu "custom_version" identificate..

shahz shahz
22 aug. 2011 04:55:28

Editat...Verific dacă post_ID este asociat cu o postare de tipul "custom_version" înainte de a manipula titlul. Îmi cer scuze pentru versiunea inițială. Nu mi-am dat seama că trebuia să fie doar pentru un singur CPT.

tollmanz tollmanz
22 aug. 2011 04:57:47

Este posibil să aveți Yoast instalat; dacă da, va trebui să vă uitați la add_filter 'wpseo_title'.

Herbert Van-Vliet Herbert Van-Vliet
5 iul. 2018 10:36:57
0

Cred că WooCommerce a făcut o treabă bună în a arăta modalități posibile de a verifica dacă chiar dorești să suprascrii titlul folosind filtrul the_title.

Uneori, poți modifica titlul care va apărea în lista de categorii și în alte locuri unde nu ai vrea.

Iată cum procedează ei:

# 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' );

Mai importante decât rescrierea titlului sunt metodele și verificările pe care le fac...

! is_admin() && is_main_query() && in_the_loop() && is_page() && is_wc_endpoint_url() etc

Ține minte aceste verificări înainte de a suprascrie titluri pe care nu vrei să le modifici sau în locuri unde nu ar trebui.

17 oct. 2023 23:10:09