删除具有实际标题的SANITIZE_TITLE_WITH_DASSES函数

时间:2018-06-28 作者:Godwin Alex Ogbonda

求你了,我真的需要帮助。下面的代码是在我的网站上将搜索查询保存为标记的代码,但它将标题替换为“-”,请问有什么方法可以使标记标题名称保持搜索状态?。

function addsometags() {

//Don\'t do anything if we\'ve already got 20 tags
$posttags = get_the_tags();
$count=0;
if ($posttags) {
foreach($posttags as $tag) {
$count++;
if ($count==20) break;
}
}


if ($count<20) {
        global $wpdb;

        $engines[\'google.\'] = \'q=\';
        $engines[\'altavista.com\'] = \'q=\';
        $engines[\'search.msn.\'] = \'q=\';
        $engines[\'yahoo.\'] = \'p=\';
        $engines[\'bing.\'] = \'q=\';
        $engines[\'yandex.\'] = \'text=\';

        $referer = $_SERVER[\'HTTP_REFERER\'];
        $blogtarget = $_SERVER["REQUEST_URI"];
        $ref_arr = parse_url("$referer");
        $ref_host = $ref_arr[\'host\'];

        foreach($engines as $host => $skey){
            if (strpos($ref_host, $host) !== false){
                $res_query = urldecode($ref_arr[\'query\']);
                if (preg_match("/{$engines[$host]}(.*?)&/si",$res_query."&",$matches)){
                    $query = trim($matches[1]);
                    $target = str_replace("\'","\'\'",str_replace(";","",sanitize_title_with_dashes($query)));
                    global $post;
                    $thePostID = $post->ID;
                    wp_add_post_tags($thePostID, $target);
            }
        }
    }
 }
}


add_action(\'wp_footer\', \'addsometags\');
请这里的专家们,帮帮我吧,我对wp函数的编码还不熟悉

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

wp_add_post_tags($thePostID, $target); 假设$target 是标记的slug或ID。并非所有可能的值都是有效的标记段塞,这就是sanitize_title_with_dashes 已使用。

因此,真正的问题是,这些标签没有人类友好的名称,只有一个鼻涕虫。

因此,取而代之的是,获取术语,使用其ID,如果它不存在,则创建它并使用新的术语ID

获取术语:

$name = str_replace("\'","\'\'",str_replace(";","",$query));
$slug = sanitize_title_with_dashes($name);
$term = get_term_by( \'slug\', $slug, \'tag\' );
如果未找到:

if ( false === $term ) {
然后创建标记:

    $term = wp_insert_term( $name, \'tag\', [
        \'slug\' => $slug
    ]);
最后,将其添加到您的帖子中:

}
wp_set_object_terms( $post_id, $term, \'tag\', true );
注意,我通过消除所有tag helper函数,直接使用术语和分类法函数。为什么要学习一组全新的标记函数,然后再学习分类法,每个函数的行为都略有不同,而您可以学习一组对所有函数都相同的函数

性能和功能

整个方法都不利于性能、扩展和数据库负载,因为它会在前端进行更改。这会使您的整个站点变得更慢。

此外,它使页面缓存变得不可能,添加到其中的任何页面缓存或查询缓存都会导致此功能失败或变得非常不可靠。

相反,您是否考虑过使用Google Analytics或Jetpack stats自动跟踪此信息?

结束

相关推荐

How to list tags

我试图列出帖子的标签,但没有成功。有人知道这里会发生什么吗?代码就停在那里,最后一行加载的是标记。我用foreach、for和introde在if语句中进行了尝试,也没有使用。<?php $tags = get_tags(); if( count( $tags) > 0) { echo \'<div id=\"etiquetas\">\'; echo \'<ul class\"tags\">