शीर्षक-टैग और document_title_parts के साथ समस्याएँ


12

Wordpress version 4.5.1

मैं एक विशेष टेम्प्लेट पर पृष्ठ के शीर्षक को गतिशील रूप से अपडेट करने का प्रयास कर रहा हूं। बहुत सारे खुदाई और wp_title()परिवर्तनों के बारे में जानने के बाद, मैं उपयोग करने का प्रयास कर रहा हूं document_title_parts। हालाँकि, मुझे फ़िल्टर को चलाने के लिए नहीं मिल सकता है।

मैं एक बच्चे के विषय में हूँ 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 );

मैंने थीम समर्थन को जोड़ने के दोनों रूपों की कोशिश की है जैसा कि ऊपर दिखाया गया है, लेकिन मेरे लॉग को देखते हुए, पेज रीलोड पर कुछ भी नहीं दिखता है। वह error_logअन्य कार्यों (जैसे wp_title) के साथ काम कर रहा था , इसलिए त्रुटि लॉगिंग काम कर रही है।

मैंने भी कोशिश की है pre_get_document_title, जो पेज लोड पर आग करता है, हालांकि मैं इसे वास्तव में शीर्षक बदलने के लिए प्राप्त करने में असमर्थ हूं।

इसलिए! मैं या तो फ़िल्टर का गलत उपयोग कर रहा हूं, अपनी थीम को सही तरीके से सेट नहीं किया, या कुछ और जिससे मैं अनजान हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा!

अधिक विवरण जोड़ने के लिए संपादित करें

एक init फ़ंक्शन का प्रयास, लेकिन वह भी काम नहीं कर रहा है: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4

इसके अलावा, जबकि मैंने किसी भी संदर्भ को हटा दिया <title>है header.php, वास्तविक साइट शीर्षक अभी भी स्रोत में दिखाई दे रहा है।


आपने यह पंक्ति क्यों टिप्पणी की //add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });? यह विषय समर्थन जोड़ने का सही उपयोग है।
सुमित

@Sumit मैंने टिप्पणी की संस्करण और सक्रिय संस्करण दोनों की कोशिश की।
हुकडोनविनटर

शायद add_theme_support()एक init हुक में फ़ंक्शन जोड़ने का प्रयास करें । एक और बात यह सुनिश्चित करने के लिए है कि आप अपनी header.phpफ़ाइल को HTML टैग करने के लिए अधिलेखित करें <title>
Howdy_McGee

@Howdy_McGee बस कोशिश की, अभी भी कुछ भी नहीं है। gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
हुकडोनविन्टर

@hookedonwinter और आपको यकीन है कि <title>आपके में कोई टैग नहीं है header.php? शायद 10साथ बदलने की कोशिश करें PHP_MAX_INT। इसके अलावा, पारित पैरामीटर एक स्ट्रिंग मान के बजाय एक सरणी है।
Howdy_McGee

जवाबों:


13

मैंने अपने विकास क्षेत्र में आपका फ़िल्टर चलाया। यह काम नहीं किया। फिर मैंने योस्ट एसईओ प्लगइन को बंद कर दिया, जो मुझे पता था कि पेज शीर्षक के साथ भी गड़बड़ हो रहा था। फिर काम हुआ। तो मेरा सुझाव एक और प्लगइन होगा इसके साथ खिलवाड़ है।

योस्ट के मामले में, यह pre_get_document_titleखाली नहीं लौटने के लिए एक फिल्टर कॉल था । उस मामले wp_get_document_titleमें कम सर्कुलेट किया जाता है और documents_title_partsफ़िल्टर सहित बाकी फ़ंक्शन का मूल्यांकन नहीं किया जाता है, जैसा कि आप कोड की पहली पंक्तियों से देख सकते हैं:

$title = apply_filters( 'pre_get_document_title', '' );
if ( ! empty( $title ) ) {
    return $title;
    }

इसलिए, मैंने आपका फ़िल्टर लिया और हुक को बदल दिया pre_get_document_title। यह काम नहीं किया। फिर मैंने योस्ट में उसी फिल्टर की तुलना में प्राथमिकता को उच्च स्तर पर बदल दिया। फिर काम हुआ। इसलिए, मैं आपके सेट-अप के बारे में नहीं जानता, लेकिन मेरा सुझाव है कि आप इसे आजमाएँ:

add_filter( 'pre_get_document_title', function( $title )
  {
    error_log('here');
    return $title;
  }, 999, 1 );

1
आपको यह मिला! मुझे एक ही चीज़ मिली, और योस्ट को निष्क्रिय कर दिया। मैंने अभी-अभी प्रतिक्रिया व्यक्त की और आपकी प्राथमिकता का उपयोग किया और यह काम किया। धन्यवाद!
हुकडोनविनर

हुक पर थोड़ा और यहाँ: wordpress.stackexchange.com/questions/109869/…
cjbj

मेरी साइट से, pre_get_document_titleप्राथमिकता 15 पर्याप्त है।
vee

7

कुछ प्रयोग के बाद मैं निम्नलिखित सुझाव पर आया: क्या यह हो सकता है कि <title>टैग आपके माता-पिता के विषय के अंदर "हार्ड कोडित" है header.php? यदि ऐसा है, तो आप <title>अपने बच्चे के विषय से टैग को हटाने की कोशिश कर सकते हैं header.php(अपने माता-पिता header.phpको अपने बच्चे के विषय फ़ोल्डर में कॉपी करें ) और फिर इसके माध्यम से विषय समर्थन वापस जोड़ें functions.php:

add_theme_support( 'title-tag' );

मैं यह समझाने की कोशिश करूंगा कि इस सुझाव से मुझे क्या फायदा होगा: मैंने आपके और अन्य लोगों के सुझाव के अनुसार प्रयास किया - लेकिन यह पता चला कि मुझे स्रोत कोड में दो <title>टैग मिले हैं । पहले का मानक शीर्षक था , दूसरा संशोधित शीर्षक था । लेकिन (निश्चित रूप से) ब्राउज़र टाइटल बार में मैं केवल डिफ़ॉल्ट शीर्षक देख सकता था।

फिर मैंने header.phpउस मूल विषय का परीक्षण किया जिसका मैंने उपयोग किया था (बीस फौरन) और <title>टैग वास्तव में इस तरह से उस टेम्पलेट के अंदर हार्ड कोडित था:

<title><?php wp_title( '|', true, 'right' ); ?></title>

इसे हटाने के बाद, मैंने बच्चे के विषय में निम्नलिखित कोड जोड़ा functions.phpऔर यह काम किया:

/**
 * Theme support added
 */

function add_theme_support_child() {

    add_theme_support( 'title-tag' );

}

add_action( 'after_setup_theme', 'add_theme_support_child', 11 );


/**
 * Change the title of a page
 * 
 */

function change_title_for_a_template( $title ) {

// Check if current page template is 'template-homepage.php'
// if ( is_page_template( 'template-homepage.php' ) ) {

    // change title parts here
    $title['title'] = 'My Title'; 
    $title['tagline'] = 'My fancy tagline'; // optional
    $title['site'] = 'example.org'; //optional

// }

return $title; 

}

add_filter( 'document_title_parts', 'change_title_for_a_template', 10, 1 );

इसलिए यह मूल रूप <title>से टेम्प्लेट से टैग हटाने से पहले भी काम करता था - केवल तब दो <title> टैग थे जिनमें से बाद में अनदेखा कर दिया गया था। क्या आपके विषय के साथ भी यही समस्या हो सकती है?

हालांकि wp 4.4.0 हालांकि <title>टैग को गतिशील रूप से फ़ंक्शन द्वारा बनाया जाता है _wp_render_title_tag()जो मूल रूप से किसी अन्य फ़ंक्शन को कॉल करता है wp_get_document_title()और परिणाम के चारों ओर html टैग लपेटता है। लंबी कहानी छोटी: यदि आपके विषय header.phpमें <title>टैग गायब है , तो संभावना है कि आप शीर्षक को सीधे यहाँ से pre_get_document_titleया document_title_partsजैसा कि यहाँ वर्णित किया गया है, ओवरराइड कर सकते हैं :

1) सीधे शीर्षक बदलें:

add_filter('pre_get_document_title', 'change_the_title');
function change_the_title() {
    return 'The expected title';
}

2) शीर्षक भागों को छानना:

add_filter('document_title_parts', 'filter_title_part');
function filter_title_part($title) {
    return array('a', 'b', 'c');
}

3

अपने पोस्ट को ऊपर से बॉटम और नीचे से ऊपर तक पढ़ने के बाद, आपके पास सभी संभावित फ़िल्टर है जो फ़िल्टर के माध्यम से एक शीर्षक से गुजर रहा है pre_get_document_title। निम्नलिखित बयान यहाँ सुराग:

मैंने भी कोशिश की है pre_get_document_title, जो पेज लोड पर आग करता है,

के लिए soure कोड कोwp_get_document_title() देखते हुए, हम निम्नलिखित कोड देखते हैं:

$title = apply_filters( 'pre_get_document_title', '' );
if ( ! empty( $title ) ) {
    return $title;
}

इसका मतलब यह है कि, जब भी एक गैर खाली मान pre_get_document_titleफ़िल्टर के माध्यम से गुजरता है , तो wp_get_document_title()फ़ंक्शन pre_get_document_titleफ़िल्टर के माध्यम से पारित किए गए मान को वापस कर देगा । यह मामला है, document_title_separatorफ़िल्टर और document_title_partsफ़िल्टर को कभी भी निष्पादित नहीं किया जाएगा क्योंकि ये केवल pre_get_document_titleफ़िल्टर के बाद ही चलते हैं ।

आगे आपने जो कुछ कहा उसको देखते हुए:

... हालांकि मैं वास्तव में शीर्षक बदलने के लिए इसे प्राप्त करने में असमर्थ हूं।

आपके पास निश्चित रूप pre_get_document_titleसे प्राधिकारी के साथ एक फ़िल्टर है जो उसी फ़िल्टर के आपके उदाहरण को ओवरराइड कर रहा है, और इस फ़िल्टर के कारण, फ़ंक्शन जो भी इसे पारित करता है वह वापस आ जाता है जिसके परिणामस्वरूप आपका document_title_partsफ़िल्टर निष्पादित नहीं किया जाता है।

आपको जो करने की आवश्यकता होगी वह यह है कि grepया तो एक अच्छे संपादक का उपयोग करें और wp-contentउस pre_get_document_titleफ़िल्टर के लिए अपना संपूर्ण फ़ोल्डर खोजें । एक बार जब आप उस फ़िल्टर को स्थित कर लेते हैं, तो आप उस फ़िल्टर को निकालने के लिए उसे वहां से ले जा सकते हैं और उसे अपने से बदल सकते हैं


जवाब के लिए धन्यवाद! दुर्भाग्य से, के लिए WP-सामग्री के सभी खोज document_title_partsया pre_get_document_titleरिटर्न 0 परिणाम नहीं। मैं सब-टाइमटेक्स्ट 2 का उपयोग सभी wp-content को खोजने के लिए कर रहा हूँ ...
hookedonwinter

यह वास्तव में मुझे मारता है। यह वास्तव में अजीब है कि एक फंक्शन में एक फिल्टर सही ढंग से फायर करता है और उसके बाद फिल्टर नहीं करता है। यदि आप सुनिश्चित हैं कि यह एक प्लगइन या आपका विषय नहीं है, तो सभी कैश और पुनर्स्थापना वर्डप्रेस को साफ़ करने का प्रयास करें। वेनिला पर एक बंडल किए गए विषय के साथ क्या होता है, अगर आप सीधे मूल विषय को बदलते हैं तो क्या होता है। यह दुर्भाग्य से जहां तक ​​मैं दी गई जानकारी के साथ मदद कर सकता हूं। यदि आपके पास कोई अतिरिक्त जानकारी है, तो एक संपादन करें ताकि हम इसे सुलझाने में आपकी सहायता कर सकें
Pieter Goosen

@PieterGoosen जब पहला फ़िल्टर गैर खाली हो जाता है तो फ़ंक्शन कम परिचालित होता है और दूसरे फ़िल्टर का मूल्यांकन नहीं किया जाता है।
cbbj

@cjbj हाँ, सही है, यही मैंने अपने उत्तर में कहा है, मुद्दा यह है कि क्या है। जैसा कि ओपी ने कहा, वह एक फिल्टर नहीं ढूँढ सकता है pre_get_document_title, क्या पूरी तरह से समझाया होगा कि दूसरा फ़िल्टर क्यों नहीं आग लगाएगा। यह pre_get_document_titleफ़िल्टर को खाली छोड़ देता है , जिसका अर्थ है कि फ़ंक्शन के अन्य दो फ़िल्टर में आग होनी चाहिए, लेकिन वे नहीं करते हैं। यह मुझे एक भ्रष्ट वर्डप्रेस कोर को समाप्त करने के लिए छोड़ देता है।
पीटर गोयन

सिवाय इसके कि मुझे आसानी से काम करने के लिए वह फ़िल्टर मिल गया।
cjbj

2

यदि मूल विषय title-tagआपके लिए समर्थन की घोषणा नहीं करता है, तो आप इसे बाल विषय में इस तरह कर सकते हैं

/**
 * Theme support should be added on `after_setup_theme`
 */
function add_theme_support_child() {

    add_theme_support( 'title-tag' );

}

add_action( 'after_setup_theme', 'add_theme_support_child', 11 );

document_title_partsइस तरह से अपेक्षित रिटर्न फिल्टर को फ़िल्टर करें, यदि आपकी आवश्यकताओं के अनुसार स्थिति को बदलना सुनिश्चित करें, या यह पूरी तरह से हटा दें कि यदि यह काम करता है तो परीक्षण के लिए पूरी साइट में शीर्षक को बदल दें।

/**
 * Change title of a page conditionally
 * 
 * @return $title - type array
 * $title['title'] - Page Title
 * $title['tagline'] - Site Tagline
 */
function change_title_for_a_template( $title ) {

    // Check if current page template is 'template-homepage.php'
    if ( is_page_template( 'template-homepage.php' ) ) {
        $title['title'] = 'Changed title for a template';
    }

    return $title;

}

add_filter( 'document_title_parts', 'change_title_for_a_template' );

आप दो कार्यों की कोशिश कर सकते हैं?


जवाब के लिए धन्यवाद। मैंने इसे आजमाया, यदि इसे अधिक व्यापक बनाने के लिए यदि कथन को हटा दिया जाए, और मैंने यह देखने के लिए कुछ त्रुटि लॉगिंग जोड़ दी कि क्या हो रहा है। यहाँ कोड है। । केवल add_theme_support_childलॉग किया गया है।
हुकडोनविनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.