web-dev-qa-db-ja.com

次および前の投稿リンク機能にタイトル属性を追加する方法を教えてください。

何らかの理由で、WordPressのnext_post_linkおよびprev_post_link呼び出しにtitle属性が追加されません。どうやって追加できますか?

6
Infocentre

更新

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>";
}
6
kaiser

get_adjacent_postnext_post_linkの代わりにprev_post_linkを使用するだけで、関数とフィルターの必要はありません。get_adjacent_postは前と次の投稿を取得するために使用されることに注意してください、あなたはそれについて読むことができます here そして、タイトル属性はこれを使用します

$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>'; }

次の投稿とタイトル属性を取得するには、これを使用します

$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>'; }
6
Rahman Sharif

私も今これをやろうとしています。フィルタ機能は最善の策のようです。

これは私が今いるところですが、私は次または前の記事のタイトルを取得してフィルタに渡すことはできません。

編集:それを考え出した。ちょっとしたハッカーかもしれませんが、うまくいきます。

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;
}
4
Picard102

少し古すぎるかもしれませんが、返信についてコメントする方法がよくわかりませんでした...

要するに、同じ解決策を探した後、私は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');
1
user5424

コードを少し短くしました。

/*
 * Add "title=" to previous_post_link and next_post_link
 */

add_filter('next_post_link', function($link) {
  $next_post = get_next_post();
  $title = $next_post->post_title;
  $link = str_replace('href=', 'title="'.$title.'" href=', $link);
  return $link;
});

add_filter('previous_post_link', function($link) {
  $previous_post = get_previous_post();
  $title = $previous_post->post_title;
  $link = str_replace('href=', 'title="'.$title.'" href=', $link);
  return $link;
});
0
Ivan Shim