Wordpress version 4.5.1
Saya mencoba memperbarui judul halaman secara dinamis pada templat tertentu. Setelah banyak menggali dan mempelajari tentang wp_title()
perubahan, saya mencoba menggunakannya document_title_parts
. Namun, saya tidak bisa menjalankan filter sama sekali.
Aku di tema anak, functions.php
:
add_theme_support( 'title-tag' );
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
add_filter( 'document_title_parts', function( $title )
{
error_log('here');
return $title;
}, 10, 1 );
Saya sudah mencoba kedua variasi penambahan dukungan tema seperti yang ditunjukkan di atas, tetapi menonton log saya, tidak ada yang muncul di halaman yang dimuat ulang. Itu error_log
bekerja dengan fungsi-fungsi lain (seperti wp_title
), sehingga logging kesalahan berfungsi.
Saya juga sudah mencoba pre_get_document_title
, yang tidak bisa memuat halaman, meskipun saya tidak bisa mengubahnya untuk mengubah judul.
Begitu! Saya salah menggunakan filter, tidak mengatur tema saya dengan benar, atau sesuatu yang tidak saya sadari. Bantuan apa pun akan sangat dihargai!
edit untuk menambahkan lebih detail
Mencoba fungsi init, tetapi itu juga tidak berfungsi: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
Selain itu, walaupun saya telah menghapus referensi apa pun <title>
dari header.php
, judul situs yang sebenarnya masih muncul di sumbernya.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
? Itu benar penggunaan menambahkan dukungan tema.add_theme_support()
fungsi di hook init . Hal lain adalah memastikan bahwa Anda menimpaheader.php
file Anda agar tidak memiliki<title>
tag html .<title>
tag di Andaheader.php
? Mungkin coba ganti10
denganPHP_MAX_INT
. Selain itu, parameter yang dikirimkan adalah array bukan nilai string.Jawaban:
Saya menjalankan filter Anda di area pengembangan saya. Itu tidak berhasil. Kemudian saya mematikan plugin SEO Yoast, yang saya tahu juga mengacaukan judul halaman. Lalu berhasil. Jadi saran saya adalah plugin lain yang mengacaukannya.
Dalam kasus Yoast, itu adalah panggilan filter untuk
pre_get_document_title
mengembalikan non kosong. Dalam halwp_get_document_title
ini hubungan pendek dan fungsi lainnya, termasukdocuments_title_parts
filter, tidak dievaluasi, seperti yang Anda lihat dari baris pertama kode:Jadi, saya mengambil filter Anda dan mengganti pengaitnya
pre_get_document_title
. Itu tidak berhasil. Kemudian saya mengubah prioritas ke level yang lebih tinggi daripada filter yang sama di Yoast. Lalu berhasil. Jadi, saya tidak tahu tentang pengaturan Anda, tetapi saya sarankan Anda mencoba ini:sumber
pre_get_document_title
prioritas 15 sudah cukup.Setelah beberapa percobaan saya menemukan saran berikut: mungkinkah, bahwa
<title>
tag itu "kode keras" di dalam tema orang tua Andaheader.php
? Jika demikian, Anda dapat mencoba menghapus<title>
tag dari tema anak Andaheader.php
(salin orangtuaheader.php
Anda ke folder tema anak Anda) dan kemudian tambahkan dukungan tema kembali melaluifunctions.php
:Saya akan mencoba menjelaskan apa yang menuntun saya ke saran ini: Saya mencoba seperti yang Anda dan orang lain sarankan - tetapi ternyata saya menemukan dua
<title>
tag dalam kode sumber. Yang pertama memiliki judul standar , yang kedua adalah judul yang dimodifikasi . Tapi (tentu saja) di bar judul browser saya hanya bisa melihat judul default.Saya kemudian memeriksa
header.php
tema induk yang saya gunakan (dua puluh empat belas) dan<title>
tag itu memang kode keras di dalam template itu seperti ini:Setelah saya menghapusnya, saya menambahkan kode berikut ke tema anak
functions.php
dan berhasil:Jadi itu pada dasarnya juga bekerja sebelum menghapus
<title>
tag dari template - hanya ada dua<title>
tag yang kemudian diabaikan. Mungkinkah ini masalah yang sama dengan tema Anda?Sejak wp 4.4.0 namun
<title>
tag dibuat secara dinamis oleh fungsi_wp_render_title_tag()
yang pada dasarnya memanggil fungsi lainwp_get_document_title()
dan membungkus tag html di sekitar hasilnya. Singkat cerita: jika tema Andaheader.php
tidak memiliki<title>
tag, kemungkinan Anda dapat mengganti judul secara langsungpre_get_document_title
ataudocument_title_parts
seperti yang dijelaskan di sini :1) ubah judul secara langsung:
2) memfilter bagian judul:
sumber
Setelah membaca posting Anda dari atas ke bawah dan ke bawah ke atas, Anda mungkin memiliki semua filter yang meneruskan judul melalui
pre_get_document_title
filter. Petunjuk di sini adalah pernyataan berikut:Melihat kode sumber
wp_get_document_title()
, kita melihat kode berikut:Artinya, setiap kali nilai yang tidak kosong dilewatkan melalui
pre_get_document_title
filter,wp_get_document_title()
fungsi akan mengembalikan nilai apa pun yang dilewatkan melaluipre_get_document_title
filter. Jika demikian,document_title_separator
filter dandocument_title_parts
filter tidak akan pernah dijalankan karena ini hanya berjalan setelahpre_get_document_title
filter.Melihat apa yang Anda katakan sedikit lebih jauh tentang:
Anda pasti memiliki
pre_get_document_title
filter dengan otoritas yang menggantikan instance Anda dari filter yang sama, dan karena filter ini, fungsi mengembalikan apa pun yang diteruskan ke sana yang mengakibatkandocument_title_parts
filter Anda tidak dieksekusi.Yang perlu Anda lakukan adalah menggunakan salah satu
grep
atau editor yang baik dan mencari seluruhwp-content
folder Anda untukpre_get_document_title
filter itu. Setelah Anda menemukan filter itu, Anda dapat mengambilnya dari sana untuk menghapus filter itu dan menggantinya dengan milik Andasumber
document_title_parts
ataupre_get_document_title
mengembalikan 0 hasil. Saya menggunakan SublimeText 2 untuk mencari semua konten-wp ...pre_get_document_title
, apa yang akan menjelaskan mengapa filter kedua tidak akan menyala. Ini membiarkanpre_get_document_title
filter kosong, yang berarti dua filter lain dalam fungsi harus diaktifkan, tetapi tidak. Itu membuat saya menyimpulkan inti Wordpress yang korup.Jika tema induk tidak menyatakan dukungan untuk
title-tag
Anda dapat melakukannya seperti ini di tema anakSaring
document_title_parts
array tipe pengembalian yang diharapkan, seperti ini, pastikan untuk mengubah kondisi if sesuai kebutuhan Anda, atau hapus sepenuhnya untuk mengubah judul di seluruh situs hanya untuk pengujian jika berfungsi.Bisakah Anda mencoba dua fungsi ini?
sumber
add_theme_support_child
dicatat.