Добавление тега таксономии WordPress для хэштегов в контент WordPress - PullRequest
0 голосов
/ 13 октября 2019

Таксономии WordPress помогают в SEO, и они делают сайты с большим количеством постов легко сортируемыми. Как мы можем автоматически преобразовать любое слово, начинающееся с '#', в качестве тега WordPress, всякий раз, когда сообщение сохраняется.

Мой сайт содержит сотни сообщений, и авторы не любят добавлять теги. Использование системы хэштегов может гарантировать, что им нравится помещать теги.

Для каждого сохранения в WordPress я хочу найти слова, начинающиеся с '#', например '#Apple A Day', и преобразовать #Apple втег WordPress по умолчанию. Кроме того, я хочу сделать это для всех типов записей.

Я нашел хорошее объяснение того, как это делать в комментариях, но, поскольку я не очень хорош в PHP, я не смог сделать это с содержимым записи WordPress. ,

Добавление тега таксономии в сообщение WordPress, написав его в комментарии с помощью хэштега

Я пытался сделать это с помощью wp_insert_post_data, но он не работает.

1 Ответ

0 голосов
/ 13 октября 2019

сначала вы должны создать плагин для WordPress, который подключается к опубликованному сообщению или сообщению об обновлении, на которое вы можете ссылаться this
, после этого вы можете добавлять теги всякий раз, когда они находят hastag в post_content икод выглядит следующим образом

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 );

, вы можете изменить параметр приоритета add_action, см. this ичтобы изменить весь хэстаг в посте на url, вы можете использовать код, подобный этому

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