infocentre
  • 0
Новичок

Как я могу добавить атрибуты title к функциям ссылки на следующую и предыдущую публикацию?

  • 0

По какой-то причине title атрибут не добавляется next_post_link и не prev_post_link вызывается в WordPress. Как я могу добавить один?

Share
  1. Есть next|previous_post_link фильтр. Один из способов — использовать регулярное выражение. кстати, вставьте свой текущий предыдущий/следующий код.

    • 0
  2. Обновлять

    Когда я удалил репо на GitHub, вот новый ответ.

    add_filter( 'previous_post_link', 'wpse13044_adjacent_post_link_tooltip', 10, 2 );
    add_filter( 'next_post_link', 'wpse13044_adjacent_post_link_tooltip', 10, 2 );
    function wpse13044_adjacent_post_link_tooltip( $format, $link )
    {
        $previous = 'previous_post_link' === current_filter();
        // Get the next/previous post object
        $post = get_adjacent_post(
             false
            ,''
            ,$previous
        );
        // Copypasta from cores `get_adjacent_post_link()` fn
        '' === $title = get_the_title( $post->ID );
            AND $title = $previous 
                ? sprint( __( 'Previous Post: %s', 'your_textdomain' ), $title )
                : sprint( __( 'Next Post: %s', 'your_textdomain' ), $title );
    
        $format = str_replace(
             'rel="'
            ,sprintf(
                 'title="%s" rel="'
                ,$title
             )
            ,$format
        );
    
        return "<span class='some classes'>{$format}</span>";
    }
    
    • 0
  3. Нет необходимости в функциях и фильтрах, все, что вам нужно сделать, это использовать get_adjacent_post вместо next_post_link и prev_post_link Обратите внимание, что get_adjacent_post это используется для получения предыдущего и следующего сообщения, вы можете прочитать об этом здесь. Чтобы получить предыдущее сообщение и его атрибут заголовка, используйте это

    $prev_post = get_adjacent_post(false, '', true);
    if(!empty($prev_post)) {
    echo '<a href="' . get_permalink($prev_post->ID) . '" title="' . $prev_post->post_title . '">' . $prev_post->post_title . '</a>'; }
    

    Чтобы получить следующий пост и его атрибут title, используйте это

    $next_post = get_adjacent_post(false, '', false);
    if(!empty($next_post)) {
    echo '<a href="' . get_permalink($next_post->ID) . '" title="' . $next_post->post_title . '">' . $next_post->post_title . '</a>'; }
    
    • 0
  4. Я тоже сейчас пытаюсь это сделать. Функция фильтра кажется лучшим выбором.

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

    Редактировать: Разобрался. Вероятно, немного хакерский, но он работает.

    add_filter('next_post_link','add_title_to_next_post_link');
    function add_title_to_next_post_link($link) {
    global $post;
    $post = get_post($post_id);
    $next_post = get_next_post();
    $title = $next_post->post_title;
    $link = str_replace("rel=", " title='".$title."' rel", $link);
    return $link;
    }
    
    add_filter('previous_post_link','add_title_to_previous_post_link');
    function add_title_to_previous_post_link($link) {
    global $post;
    $post = get_post($post_id);
    $previous_post = get_previous_post();
    $title = $previous_post->post_title;
    $link = str_replace("rel=", " title='".$title."' rel", $link);
    return $link;
    }
    
    • 0
  5. Возможно, немного староват, и я не был уверен, как прокомментировать ответ…

    Короче говоря, после поиска того же решения я немного изменил предложение Picard102:

    /**
     * Filter previous_post_link and next_post_link
     */
    function filter_next_post_link($link) {
        global $post;
        $post = get_post($post_id);
        $next_post = get_next_post();
        $title = $next_post->post_title;
        $link = str_replace("rel=", 'title="' . $title . '" rel=', $link);
        return $link;
    }
    add_filter('next_post_link', 'filter_next_post_link');
    
    function filter_previous_post_link($link) {
        global $post;
        $post = get_post($post_id);
        $previous_post = get_previous_post();
        $title = $previous_post->post_title;
        $link = str_replace("rel=", 'title="' . $title . '" rel=', $link);
        return $link;
    }
    add_filter('previous_post_link', 'filter_previous_post_link');
    
    • 0

Оставить ответ

You must login to add an answer.