如何检查类别名称是否可用

时间:2020-08-26 作者:Naren Verma

我有一个输入字段,当用户输入任何文本时,将检查用户输入的类别名称是否可用。

Js

(function($) {  // ready handler
$(".universalSearchField").keypress(function() {
     $.ajax({
        url: "/wp-admin/admin-ajax.php",
        type: "post",
        data: { action: "universalSearchlist", keyword: $("#searchdata").val() },
        success: function(data) {
            console.log(data);
           // $("#datafetch").html( data );
        }
    });
    });

    })(jQuery);
功能。php

 add_action(\'wp_ajax_universalSearchlist\',\'universalSearch\');
 add_action(\'wp_ajax_nopriv_universalSearchlist\',\'universalSearch\');
function universalSearch(){
$the_query = new WP_Query( array(\'category_name\' => esc_attr( $_POST[\'universalSearchlist\'] ), \'post_type\' => \'post\' ) );
    foreach ( $the_query->posts as $p ) {
    $categories = get_the_category($p->ID);
    if (!empty($categories) ) {
        echo esc_html( $categories[0]->name );   
    }
}
    
}
我正在获取所有类别,我希望当用户开始输入文本框时,然后开始检查类别名称是否可用。

2 个回复
SO网友:drcrow

使用get\\u cat\\u ID(\'类别名称\')https://developer.wordpress.org/reference/functions/get_cat_id/

<?php
$category_id = get_cat_ID(\'Category Name\');
if($category_id > 0){
echo \'category exists\';
}else{
echo \'category NOT exists\';
}
?>

SO网友:Tom J Nowell

使用admin-ajax.php 而且编写自定义处理程序是不必要的,我通常建议改为编写REST API端点,但即使在这里也没有必要。

只需向RESTAPI询问该类别。如果它返回类别,则它存在;如果它不存在,则它不存在。

E、 g。https://example.com/wp-json/wp/v2/categories/?slug=categoryname

在javascript中,可能如下所示:

async function check_category_exists( slug ) {
    let response = await fetch( `https://example.com/wp-json/wp/v2/categories/?slug=${slug}` );

    if (response.ok) { // if HTTP-status is 200-299
        // get the response body (the method explained below)
        let json = await response.json();
        return ( json.length > 0 );
    } else {
        throw new Exception( "HTTP-Error: " + response.status );
    }
}
现在,我们有了一个异步JS函数,它获取术语,如果找到了,则返回true, 如果它没有返回false. 记住这些返回承诺,类似于jQuery和其他地方的AJAX函数。您可以这样使用它:

check_category_exists( "test" ).then(
    ( result ) => {
        if ( result ) {
            console.log( "test exists" );
        } else {
            console.log( "it does not exist" );
        }
    }
).catch(
    error => console.log( "something went wrong" )
);
确保更改example.com 要访问您的站点,甚至更好,请让WP将REST API的路径放在页面上,以便您可以访问它,并在任何地方使用相同的代码(提示:在站点上问这个问题,很容易回答,有很多有趣的事情要知道)

或者,通过从REST API获取类别/wp-json/wp/v2/categories 并将它们存储在数组/列表中。然后,您可以使用该数组列出搜索中的项目,并可以测试该数组中是否有项目,以查看该项目是否存在。

相关推荐

如何按照与菜单相同的顺序对Get_Categories()进行排序?

我使用了一个主题,我注意到它在菜单中动态显示了一系列类别:我需要相同的类别列表,但页脚的HTML标记不同。目前,这是我在页脚中的内容:页脚。php:<?php $categories = get_categories(); foreach($categories as $category) { echo \'<a href=\"\' . get_category_link($category->term_id) . \'\"