web-dev-qa-db-ja.com

役職から余分なクラスを削除する

WordPressブログの投稿タイトルからタグ、カテゴリクラスを削除したいです。フロントエンドでは、Wordpressは各記事のタイトルごとに追加のクラスを生成します。

たとえば、 この記事 には、次の図に示すように、これらの記事のタイトルクラス "category-tips-guide" "tag-indian-army"があります。

enter image description here

私はいくつかの余分なクラス(このページで共有されている)を削除するために次のスニペットを試してみました、そしてそれは働きます:

function lsmwp_remove_postclasses($classes, $class, $post_id) {
$classes = array_diff( $classes, array(
    'hentry',
    'type-' . get_post_type($post_id),
    'status-' . get_post_status($post_id),
) );
return $classes;
add_filter('post_class', 'lsmwp_remove_postclasses', 10, 3);

しかし、このコードの問題点は、Tag、Categoryクラスが削除されないことです。

post_classへの参照:

  1. https://codex.wordpress.org/Function_Reference/post_class
  2. https://core.trac.wordpress.org/browser/tags/4.9.7/src/wp-includes/post-template.php#L0
1
Narender Chopra

これを試して。

// **** Remove unwanted classes
function remove_classes($classes, $class, $post_id)
{
    // Array that holds the undesired classes
    $removeClasses = array(
        'category-',
        'tag-'
    );

    // Array to store the new class names
    $newClasses = array();
    foreach ($classes as $_class)
    {
        // Iterate through the array of undesired classes and
        // check if the current $_class name starts with the
        // undesired class name
        $hasClass = FALSE;
        foreach ($removeClasses as $_removeClass)
        {
            if (strpos($_class, $_removeClass) === 0)
            {
                $hasClass = TRUE;
                break;
            }
        }

        // If $_class does not contain an undesired class name,
        // add it to the array of new class names.
        if (!$hasClass)
        {
            $newClasses[] = $_class;
        }
    }

    // Return the array of new class names
    return ($newClasses);
}
add_filter('post_class', 'remove_classes', 10, 3);

このフィルタは、望ましくないクラス名の配列($removeClasses)を宣言します。あなたがしたくないクラス名でそれを展開してください。

次に、関数は渡されたクラスの配列($classes)を反復処理し、$removeClasses配列で定義したクラスが含まれているかどうかを確認します。そうでなければ、それを新しい配列($newClasses)に追加します。そうであれば、スキップします。

最後に、新しい配列$newClassesを返します。

基本的にそれはあなたが望まないクラスを整理します。そして渡された$classes配列を操作する代わりに、それは良いクラスだけで新しいものを作成して代わりにそれを返します。

私はまだテストしていません。私はWordPressのインストールを今ここで利用することはできません。 post_classが正しいフィルターではないかもしれないので、それはうまくいかないかもしれません。

0
Mario Werner

$classestag-で始まる要素もすべてcategory-から削除する必要があります。難しいのは、type-status-以外では、それらのインスタンスが複数存在する可能性があることです。

そのため、配列をループ処理して、これらの文字列で始まるインスタンスをすべて削除する必要があります。

foreach ($classes as $class) {
  if (substr ($class, 0, 4) === "tag-") $class = '';
  if (substr ($class, 0, 8) === "category-") $class = '';
  }
0
cjbj