使用回调函数更新术语计数

时间:2011-08-20 作者:Innate

现在使用wp\\u update\\u term\\u count\\u,如何使用update\\u count\\u回调指定我自己的计数。我需要包括当前数据库类别能够显示的其他数据库的计数。当前类别中可能没有任何帖子,但可以在另一个数据库中显示来自同一类别的帖子。

我不完全确定现在如何将呼叫传递回wp\\u update\\u term\\u count\\u,也不确定它应该包含什么-它是否只需要一个新的计数?

1 个回复
SO网友:tollmanz

我想我已经解决了。首先,您需要定义分类法。我直接从抄本中提取这段代码;但是,我添加了一个参数update_count_callback. 我已将此设置为标题巧妙的my_update_count_callback. 这只是指定当类型为post (这将是与分类法关联的任何CPT)添加或更新后,将执行此函数,而不是执行更新计数的常规例程。分类法注册于:

add_action(\'init\', \'add_taxonomy\');
function add_taxonomy()
{
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        \'name\' => _x( \'Genres\', \'taxonomy general name\' ),
        \'singular_name\' => _x( \'Genre\', \'taxonomy singular name\' ),
        \'search_items\' =>  __( \'Search Genres\' ),
        \'all_items\' => __( \'All Genres\' ),
        \'parent_item\' => __( \'Parent Genre\' ),
        \'parent_item_colon\' => __( \'Parent Genre:\' ),
        \'edit_item\' => __( \'Edit Genre\' ),
        \'update_item\' => __( \'Update Genre\' ),
        \'add_new_item\' => __( \'Add New Genre\' ),
        \'new_item_name\' => __( \'New Genre Name\' ),
        \'menu_name\' => __( \'Genre\' ),
    );

    register_taxonomy(
        \'genre\',
        array(\'post\'),
        array(
            \'hierarchical\' => true,
            \'labels\' => $labels,
            \'show_ui\' => true,
            \'query_var\' => true,
            \'rewrite\' => array( \'slug\' => \'genre\' ),
            \'update_count_callback\' => \'my_update_count_callback\'
        )
    );
}
这是最直接的部分。接下来,我定义了回调。请注意,此回调将采用两个参数terms (与CPT相关的术语ID)和taxonomy (分类法的名称)。普通更新函数在分类法中定义。第2435行附近的php。如果您有指定的回调,它将运行该例程,而不是正常的例程。对于下面的函数,我只修改了普通代码。

function my_update_count_callback($terms, $taxonomy)
{
    global $wpdb;
    foreach ( (array) $terms as $term)
    {
        do_action( \'edit_term_taxonomy\', $term, $taxonomy );

        // Do stuff to get your count
        $count = 15;

        $wpdb->update( $wpdb->term_taxonomy, array( \'count\' => $count ), array( \'term_taxonomy_id\' => $term ) );
        do_action( \'edited_term_taxonomy\', $term, $taxonomy );
    }
}
您所需要做的就是编写获取计数的例程,然后更新计数。请注意,我在两个do_action 调用,因为正常函数允许在此注入代码。我认为重要的是把它们留在那里,这样你的插件就不会导致其他插件出现故障。

结束

相关推荐

Multi-site or categories?

我最近为一所大学的广播电台重新设计了一个网站,从Drupal切换到Wordpress。该网站基于广播电台,但每个专业节目也会有自己的博客。然而,我希望从主要内容到每个博客的布局都是一样的。分类或多或少会起作用,但当我想要博客的信息页面时,事情就变得棘手了,比如“关于”之类的。假设我有一个“现场”节目。我希望所有内容都是/live/page或/live/2011/06/post标题,但Wordpress只想发布帖子,我还没有找到任何可靠的permalink插件。我应该坚持使用类别吗?我怎样才能改善这种情况?