【问题标题】:Turn all titles in wordpress powered site into "Capitalized" case将 wordpress 驱动网站中的所有标题转换为“大写”案例
【发布时间】:2010-06-13 21:26:26
【问题描述】:

所以我需要一个关于如何将 wordpress 支持的网站上的所有标题转换为大写的查询或提示。

我现在拥有的是这样的:

AAAAA BBBBB CCCCC

我希望它是这样的:

Aaaaa Bbbbb Ccccc

我确实尝试在此处进行谷歌搜索和搜索,但未能完成该任务,因此非常感谢任何帮助!

更新:

我需要更新数据库中的标题。只是要清楚。 :)

【问题讨论】:

  • 假设其他情况不能阻止它,您可能只想考虑将第一个字母大写,因为它往往看起来更好。
  • 什么?我不跟着你。我确实想将标题中每个单词的第一个字母大写。 O.o
  • 我只是说(以一种面面相觑的方式)如果你不对每个单词都这样做,而只对第一个单词这样做可能会更好看,而其余的则纯粹小写。这取决于你的情况——你显然会像这样的书名大写,但你不会对像这样的问题标题这样做。我只是说如果你的标题的用法更接近后者,那么如果你不将每个单词的第一个字母大写,而只将标题的第一个字母大写,它可能会更好看。

标签: php mysql wordpress capitalization


【解决方案1】:

MySQL 中没有这方面的功能,但您可以像这样创建一个:

DROP FUNCTION IF EXISTS proper;
SET GLOBAL  log_bin_trust_function_creators=TRUE;
DELIMITER |
CREATE FUNCTION proper( str VARCHAR(128) )
RETURNS VARCHAR(128)
BEGIN
  DECLARE c CHAR(1);
  DECLARE s VARCHAR(128);
  DECLARE i INT DEFAULT 1;
  DECLARE BOOL INT DEFAULT 1;
  DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
  SET s = LCASE( str );
  WHILE i < LENGTH( str ) DO 
    BEGIN
      SET c = SUBSTRING( s, i, 1 );
      IF LOCATE( c, punct ) > 0 THEN
        SET BOOL = 1;
      ELSEIF BOOL=1 THEN 
        BEGIN
          IF c >= 'a' AND c <= 'z' THEN 
            BEGIN
              SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
              SET BOOL = 0;
            END;
          ELSEIF c >= '0' AND c <= '9' THEN
            SET BOOL = 0;
          END IF;
        END;
      END IF;
      SET i = i+1;
    END;
  END WHILE;
  RETURN s;
END;
|
DELIMITER ;

来自here。

您可以通过运行轻松更新:

Update wp_posts
Set post_title = proper(post_title)

【讨论】:

    【解决方案2】:

    您可以将其保留在数据库中,并通过 css 强制标题以大写字母显示:

    h2 {
      text-transform:capitalize;
    }
    

    【讨论】:

      【解决方案3】:

      只需单独使用 ucwords( $title ) - 但要非常仔细地检查您的用例 - 首字母缩略词最终不会像您的用户所期望的那样显示。

      “TLAs 初学者指南”将变为“Tlas 初学者指南”

      【讨论】:

        【解决方案4】:

        您可以尝试用ucwords 和strtolower 包装wordpresses the_title(); 函数

        <?php echo ucwords(strtolower(the_title(null, null, false))); ?>
        

        据我所知,这需要标题值使用 strtolower 将其转换为小写,然后使用 ucwords 将每个单词大写。

        我自己没有尝试过,所以我不知道它是否有效,但这就是我会尝试的方式。

        希望对你有帮助

        编辑:是的,我已经查看了我的一个旧文件,在您的 functions.php 中,您可以定义一个函数来挂钩 save_post 操作。使用 post 变量您应该能够调整该数据,但就像其他人所说的那样,您必须小心,以防它不会产生预期的效果。

        add_action('save_post', 'save_postdata');
        function save_postdata($post_id) {
            //edit code here
            update_post_meta($post_id, 'title', $title);
        }
        

        我正在使用update_post_meta() 功能,我不完全确定它是否具有编辑标题的能力,不幸的是我不必运行测试。

        你们觉得呢?

        【讨论】:

        • 嗯,我想这可行,但我想要的是更新数据库中的数据。这个灵魂将从数据库中加载 AAAAA BBBBB CCCCC 标题,然后将其转换为 Aaaaa Bbbbb Ccccc,这仍然会使该标题在我的数据库中看起来像 AAAAA BBBBB CCCCC。如果我不清楚我的问题,请告诉我,我会尝试解释更多。
        • 嗯,是的,我知道你的意思,嗯,这有点复杂,等等,看看我能不能找到一个例子......
        【解决方案5】:

        作为记录,上面引用的 MySQL 函数在最后一个字符单独存在时会失败,例如,

        Public John q
        

        如果您不需要填充,有一个简单的解决方法:

        trim(proper(concat(myfield, '    ')))
        

        【讨论】:

          猜你喜欢
          • 2014-02-19
          • 2017-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多