在 WordPress 内容中为主题标签添加 WordPress 分类标签

Add A WordPress Taxonomy Tag for Hashtags in WordPress Content

WordPress 分类有助于 SEO,它们使具有大量 post 的网站易于分类。每当 post 保存时,我们如何自动将任何以“#”开头的单词转换为 WordPress 标签。

我的站点有 100 个 post,作者不喜欢放置标签。使用主题标签系统可以确保他们喜欢放置标签。

对于每个 WordPress post 保存,我想找到以“#”开头的单词,例如 'An #Apple A Day' 并将#Apple 转换为默认的 WordPress 标签。此外,我想为所有 post 类型执行此操作。

我在评论中找到了如何做的很好的解释,但是因为我不擅长 PHP,所以我无法用 WordPress post 的内容来做。

我尝试用 wp_insert_post_data 来做,但它不起作用。

首先你必须为 wordpress 构建一个插件,它可以挂接到已发布的 post 或更新 post 你可以参考 this
之后,只要他们在 post_content 上找到 hastag,您就可以添加标签,代码如下

function post_published_notification( $ID, $post ) {
    $content = $post->post_content;
    preg_match_all('/( #\w+)/', $content, $matches, PREG_PATTERN_ORDER);
    if(isset($matches[1])){
        foreach($matches[1] as $matchKey){
            wp_set_post_tags( $ID, trim($matchKey), true);
        }
    }
}
add_action( 'publish_post', 'post_published_notification', 10, 2 );

如果你使用 frontier post 也许你可以使用这个

function post_published_from_frontier($my_post){
    $content = $my_post->post_content;
    $ID = $my_post->ID;
    preg_match_all('/( #\w+)/', $content, $matches, PREG_PATTERN_ORDER);
    if(isset($matches[1])){
        foreach($matches[1] as $matchKey){
            wp_set_post_tags( $ID, trim($matchKey), true);
        }
    }
}
add_action('frontier_post_post_save', post_published_from_frontier, 10 ,2 );

可以更改add_action优先级的参数参考this 并将 post 中的所有 hastag 更改为 url 您可以使用这样的代码

function old_wp_content( $content ) { 
    $content =  preg_replace('/ #([A-Za-z0-9\/\.]*)/', ' <a target=\"_blank\" href=\"https://milyin.com/hashtag/\"></a>', $content);
    return $content;
}
add_filter( 'the_content', 'old_wp_content' ); 

所以如果我们将所有代码合并到一个插件中,我们就可以像这样使用它

<?php
function post_published_notification( $ID, $post ) {
    $content = $post->post_content;
    preg_match_all('/( #\w+)/', $content, $matches, PREG_PATTERN_ORDER);
    if(isset($matches[1])){
        foreach($matches[1] as $matchKey){
            wp_set_post_tags( $ID, trim($matchKey), true);
        }
    }
}
add_action( 'publish_post', 'post_published_notification', 10, 2 );

function post_published_from_frontier($my_post){
    $content = $my_post->post_content;
    $ID = $my_post->ID;
    preg_match_all('/( #\w+)/', $content, $matches, PREG_PATTERN_ORDER);
    if(isset($matches[1])){
        foreach($matches[1] as $matchKey){
            wp_set_post_tags( $ID, trim($matchKey), true);
        }
    }
}
add_action('frontier_post_post_save', post_published_from_frontier, 10 ,2 );

function old_wp_content( $content ) { 
    $content =  preg_replace('/ #([A-Za-z0-9\/\.]*)/', ' <a target=\"_blank\" href=\"https://milyin.com/hashtag/\"></a>', $content);
    return $content;
}
add_filter( 'the_content', 'old_wp_content' );