Как заменить мета-заголовок и мета-описание в wordpress?

Извините, если мой вопрос был простым или глупым, но, пожалуйста, помогите мне решить эту проблему. Я пытаюсь динамически изменить теги <title> и <meta name="description" > в wordpress. вот что я пробовал в файле function.php.

function changeMeta_2(){
    global $wpdb;
    $cur_url = $_SERVER['REQUEST_URI']; 
    $basename = pathinfo($cur_url);
    $ebasename = $basename['filename'];
    if(is_numeric($ebasename)) {
    $url = explode('/', $basename['dirname']);
    $basename = explode('.', $url[count($url)-2]);
    $ebasename = $basename[0];
    }
    $pageName = $ebasename;



    $arraylist_subcat  = array("car","bike","boat","xxxx","yyyy","zzz","mmmm");
    $arraylist_maincat = array("aus","ind","usa","uae");


    $category_id = get_term_by('slug',$pageName, 'category');   
    $category_parentid  = get_term_by('id', $category_id->parent, 'category');   
    $parent_slug =  $category_parentid->slug;



   if ( is_page()) {        
        if ( in_array($pageName,$arraylist_maincat) ) {         
                $metaTitle = 'Browse  '.$pageName.' | Some txt title | mysite.com';
                $metaDescription = 'some of custome blablaaaaa text description  '.$pageName.' some of custome blablaaaaa text description ';                               
                echo '<title>'.$metaTitle.'</title>';
                echo '<meta name="description" content="'.$metaDescription.'"/>';                   
        }
    }
}
add_action( 'wp_head', 'changeMeta_2' );

В приведенном выше коде я пытаюсь изменить тег заголовка и метаописание для идентификатора термина, которые соответствуют значениям массива (условие in_array).

Все работает нормально, но проблема в том, что вместо переопределения (замены) тег <title> добавляется в заголовок. Это не меняет его добавление. пожалуйста, помогите мне решить эту проблему.


person Jonathan John    schedule 05.01.2016    source источник
comment
Может быть, вы ищете плагин Yoast? wordpress.org/plugins/wordpress-seo С помощью этого плагина вы можете управлять данными SEO в соответствии с страница..   -  person Dirk Pennings    schedule 05.01.2016
comment
я пытаюсь кодировать, а не плагином. подскажите пожалуйста как заменить тег title с помощью кода в функции php   -  person Jonathan John    schedule 05.01.2016


Ответы (2)


Для всех, кто задаст этот вопрос в будущем: эту функцию можно реализовать с помощью плагина Yoast SEO. .

Однако если вы хотите сделать это самостоятельно....

Чтобы изменить заголовок, а не хук wp_head, вам нужно использовать фильтры, которые действительно позволяют вам изменить заголовок: wp_title

И вы можете/должны использовать wp_head, чтобы добавить метаописание (см. документацию здесь: http://codex.wordpress.org/Meta_Tags_in_WordPress)

Также обратите внимание, что есть более простые способы получить заголовок страницы, упомянутые ниже...

Для заголовка ваш код будет выглядеть примерно так:

function changeTitle($title, $sep, $seplocation){
    global $wpdb;

    // NOTE: This is the HARD way to get the page title, and is unreliable...
    $cur_url = $_SERVER['REQUEST_URI']; 
    $basename = pathinfo($cur_url);
    $ebasename = $basename['filename'];

    if(is_numeric($ebasename)) {
        $url = explode('/', $basename['dirname']);
        $basename = explode('.', $url[count($url)-2]);
        $ebasename = $basename[0];
    }

    $pageName = $ebasename;

    // NOTE: Why not get pagename this way?
    global $post;
    $pageName = $post->post_title;

    // or if you need the slug...
    $pageName = $post->post_slug;

    $arraylist_subcat  = array("car","bike","boat","xxxx","yyyy","zzz","mmmm");
    $arraylist_maincat = array("aus","ind","usa","uae");


    $category_id = get_term_by('slug',$pageName, 'category');   
    $category_parentid  = get_term_by('id', $category_id->parent, 'category');   
    $parent_slug =  $category_parentid->slug;



   if ( is_page()) {        
        if ( in_array($pageName,$arraylist_maincat) ) {         
                $title = 'Browse  '.$pageName.' | Some txt title | mysite.com';                 
        }
    }

    return $title;
}

add_action( 'wp_title', 'changeTitle', 10, 3 );
person random_user_name    schedule 05.01.2016

Способ создания заголовка документа изменился по сравнению с Wordpress версии 4.4.0. Теперь wp_get_document_title определяет, как генерируется заголовок:

/**
 * Displays title tag with content.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Improved title output replaced `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }

    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

Вот код из v5.4.2. Вот фильтры, которые вы можете использовать для управления тегом title:

function wp_get_document_title() {
    /**
    * Filters the document title before it is generated.
    *
    * Passing a non-empty value will short-circuit wp_get_document_title(),
    * returning that value instead.
    *
    * @since 4.4.0
    *
    * @param string $title The document title. Default empty string.
    */
    $title = apply_filters( 'pre_get_document_title', '' );
    if ( ! empty( $title ) ) {
        return $title;
    }
    // --- snipped ---
    /**
    * Filters the separator for the document title.
    *
    * @since 4.4.0
    *
    * @param string $sep Document title separator. Default '-'.
    */
    $sep = apply_filters( 'document_title_separator', '-' );

    /**
    * Filters the parts of the document title.
    *
    * @since 4.4.0
    *
    * @param array $title {
    *     The document title parts.
    *
    *     @type string $title   Title of the viewed page.
    *     @type string $page    Optional. Page number if paginated.
    *     @type string $tagline Optional. Site description when on home page.
    *     @type string $site    Optional. Site title when not on home page.
    * }
    */
    $title = apply_filters( 'document_title_parts', $title );
    // --- snipped ---
    return $title;
}

Итак, вот два способа сделать это.

Первый использует фильтр pre_get_document_title, который сокращает генерацию заголовка и, следовательно, более эффективен, если вы не собираетесь вносить изменения в текущий заголовок:

function custom_document_title( $title ) {
    return 'Here is the new title';
}
add_filter( 'pre_get_document_title', 'custom_document_title', 10 );

Второй способ использует хуки document_title_separator и document_title_parts для заголовка и разделителя заголовков, которые выполняются позже в функции, после того, как заголовок сгенерирован с использованием таких функций, как single_term_title или post_type_archive_title, в зависимости от страницы и должен быть выведен:

// Custom function should return a string
function custom_seperator( $sep ) {
   return '>';
}
add_filter( 'document_title_separator', 'custom_seperator', 10 );

// Custom function should return an array
function custom_html_title( $title ) {
   return array(
     'title' => 'Custom Title',
     'site'  => 'Custom Site'
    );
}
add_filter( 'document_title_parts', 'custom_html_title', 10 );
person snnsnn    schedule 16.06.2020