web-dev-qa-db-ja.com

スラッグの一部に条件文を適用できますか?

スラッグに特定のWordが含まれているページ/投稿に条件を適用する方法(そして、そうであれば、「どうやって」)があります。

コーデックスの例の場合:

is_single( 'beef-stew' )

ナメクジに「ビーフシチュー」ではなく「ビーフ」が含まれている場合でも、条件は適用されます。

更新:コンテキストの要求に応じて...

ページが表示されているときに、項目にCSSクラスを適用するために条件付きステートメント(下記の例)を使用するナビゲーションメニューがあります。

 <?php if (is_single('mon')) { echo " class=\"current\""; }?>

上の例では、 'mon'は 'monday'です。週ごとのスケジュールの他の日についても同様です。テンプレートに追加することで、適切なスラッグを設定すれば、いつでも使用することができます。たとえば、「4月4日月曜日」の代わりに「mon」を使用することです。

スラグの一部だけに条件を適用したいので、保存する前にスラグを手動で修正する時間を節約します。そうすることを忘れた場合、誤動作の状況を取り除きます。

3
glvr

WordPressにはサブストリングテスト用の条件はありませんが、PHPの組み込み関数を使用してこれを行うことができます。 strpos()

global $post;

if( false !== strpos( $post->post_name, 'beef' ) ) {
    // Do Things
}

beefがポストスラグのどこかに見つかった場合、上記はtrueを返します。

4
Howdy_McGee

@Howdy_McGeeと同じように、ヘルパー関数を作成しようとします。

/**
 * @param $s String 
 * @return bool
 */
function queried_post_name_contains_wpse247782( $s )
{
    $obj = get_queried_object();

    return     $obj instanceof \WP_Post // Make sure it's a post object
            && false !== strpos( $obj->post_name, $s ); // post name contains it
}

そしてそれを次のように使います。

if( is_single() && queried_post_name_contains_wpse247782( 'beef' ) )
{
    // ...
}

あなたがそれをあなたのニーズにもっと拡張できることを願っています!

2
birgire