结果显示为“前缀+ID”,在搜索结果中显示为书码

时间:2017-07-02 作者:Democloak

我创建了一个CTP,并且:当在循环中显示一个post ID(示例“112”)时,我还想添加一个前缀,如“CFX”,并将结果显示为字符串“CFX+IDnumber”(示例:CFX112),并将其用作bookcode、Book ID之类的搜索。

那么,我如何才能做到这一点并让搜索接受该字符串呢?

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

为什么不在帖子中添加一个自定义字段,这样在保存帖子时,就可以自动创建一个具有该值的自定义字段,然后就可以轻松地搜索该字段并在页面上显示。

将Bookcode另存为Post Meta要保存该自定义字段,可以添加函数。php:

function save_bookcode( $post_id ) {
    // If this is just a revision, no need to save bookcode
    if ( wp_is_post_revision( $post_id ) )
        return;

    // save a custom field \'bookcode\' with CFX+ID
    add_post_meta( $post_id, \'bookcode\', \'CFX\' . $post_id, true );  // true on last param so that this field is unique and saved only the first time
}
add_action( \'save_post\', \'save_bookcode\' );
在本例中,bookcode是为任何帖子类型保存的,但您可以限制使用任何帖子类型。

在模板上显示Bookcode

然后要在模板上显示,在循环内,您只需编写:

Book ID: <?php echo get_post_meta( get_the_ID(), \'bookcode\', true ); ?>
在搜索中包括Bookcode,要在正常搜索中包括该自定义字段,可以使用pre\\u get\\u posts过滤器:

function add_bookcode_to_search( $query ) {
    if ($query->is_search && !is_admin() ) {
        $query->set( \'meta_query\', array(
            array(
                \'key\' => \'bookcode\',
                \'value\' => $query->query_vars[\'s\'],
                \'compare\' => \'LIKE\'
            )
        ));
    }

    return $query;
}
add_filter( \'pre_get_posts\', \'add_bookcode_to_search\' );
但是,只有在标题/内容和元数据上都有图书代码时,才会返回结果。如果要将此自定义字段添加为另一个搜索位置,则需要手动更改SQL查询:https://adambalee.com/search-wordpress-by-custom-fields-without-a-plugin/

或者你也可以使用一个已经完成这项工作的插件,比如Search EverythingRelenvassi.

结束