从帖子标题中删除多余的类

时间:2018-07-07 作者:Narender Chopra

我想从WordPress博客的帖子标题中删除标记、类别类。在前端,Wordpress为每一篇文章的标题生成额外的类。

例如this article, 以下图片显示了这些文章标题类“分类提示指南”“标记印度军队”:

enter image description here

我尝试了以下代码片段来删除一些额外的类(shared on this page) 它的工作原理是:

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);
但这段代码的问题是,它没有按照我的意愿删除任何标记、类别类。

Some References to 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

2 个回复
最合适的回答,由SO网友:Mario Werner 整理而成

试试这个。

// **** 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 可能不是正确的筛选器。

SO网友:cjbj

显然,您还必须删除$classes 首先是tag-category-. 困难在于type-status- 可能有多个实例。

因此,您必须在数组中循环并删除以以下字符串开头的所有实例:

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

结束

相关推荐

使用Apply_Filters帮助输出POST类

我不熟悉脚本,这是一个插件,我想修改它来输出post类。当我尝试使用时:apply_filters( \'post_class\', $page->post_class ) it仅输出array=\" \". 我是否需要一个附加函数来连接到post类?在我的研究中,我无法判断我的语法是否错误,或者我在类中缺少了一个要“拉”的函数apply_filters 抓住。非常感谢你的帮助。 var $db_fields = array (\'parent\' => \'post_parent\',