web-dev-qa-db-ja.com

特定のページのプライベートプレフィックスを非表示にする

'members'という名前の特定の1ページで、ページタイトルの前に「プライベート」プレフィックスを条件付きで非表示にしようとしています。

私はすべてのページの接頭辞を隠すためにfunctions.phpでこのコードを使いました。

function title_format($content) {
return '%s';
}

add_filter('private_title_format', 'title_format');
add_filter('protected_title_format', 'title_format');

さまざまな方法でif is_page( 'members')を使ってこれにフックしようとしましたが、これまでのところ私が管理できた唯一の結果は致命的なエラーです。

2

これは私のために働きました。重要な点の1つは、条件を満たさない場合は、コンテンツを変更せずにそのまま通過させる必要があることです。

function title_format($content) {
    if (is_page('members')) :
        return '%s';
    else :
        return $content;
    endif;
}

add_filter('private_title_format', 'title_format');
add_filter('protected_title_format', 'title_format');

ただし、これは「メンバー」のスラッグがあるページにのみ適用されます。メンバーページにページタイトルのリストを表示し、そこでプレフィックスを削除したいようです。それが唯一の場所ですか?メンバーがリンクをクリックしても、特定のページのタイトルにあるPrivate:とProtected:のプレフィックスを削除しますか?

もしそうなら、1つのアプローチは、保護されたページをすべて親ページの子として移動することです。上記のコードを使用しますが、ページがメンバーページの子であるかどうかを判断するために条件を変更します。

もう1つの方法は、ページにループアウトするときにページテンプレートのタイトルをフィルタ処理することです。私が csstricks から再利用した関数:

function the_title_trim($title) {

    $title = attribute_escape($title);

    $findthese = array(
        '#Protected:#',
        '#Private:#'
    );

    $replacewith = array(
        '', // What to replace "Protected:" with
        '' // What to replace "Private:" with
    );

    $title = preg_replace($findthese, $replacewith, $title);
    return $title;
}

そしてあなたのページテンプレートでは、このようなタイトルを表示するでしょう。

echo the_title_trim(get_the_title());

そのページのカスタムテンプレートを作成していると仮定すると、それはMembersページのその特定のページテンプレートにのみ適用されます。

私はこれがあなたにそれに近づく方法のためのいくつかのアイデアを与えることを願っています。

1
Jeremy Ross

フィルターを使用しない簡単な解決策は、タイトルを次のように印刷することです。

<?php echo $post->post_title; ?>

これにより、プレフィックスなしで元のタイトルが印刷されます。

0
Alberto Ice