我想要动态地更改我的术语的弹头

时间:2019-02-25 作者:Frenchy_WP

我希望动态更改我的slug,以便它们与我的术语名称一起显示,为此,我在管理员面板中创建了一个选项,允许我启动该过程,但我真的不知道从哪里开始。

首先,我想我必须恢复分类法,在分类法中,我找到了所有需要动态更改的术语。

是否有人可以为我正在尝试创建的这个函数使用一个示例代码?

以下是我必须使用的分类法,以便让我的术语动态修改这些分类法:

分类:recipe\\u类别、recipe\\u类型、recipe\\u事件、product\\u类别

下面是允许我启动流程的代码:

    <?php
add_action( \'admin_menu\', \'slug_migrate_menu\' );
function slug_migrate_menu() {
    add_submenu_page(\'edit.php?post_type=recipe\', \'Migration des slugs\', \'Migration des slugs\', \'manage_options\', \'slug-migrate\', \'slug_migrate_page\');
}
function slug_migrate_page() {
?>
<h1>Migration des slugs</h1>
<button id="migrateSlugBtn">Go !</button>
<div id="migrateSlugResult"></div>
<script>
jQuery(\'#migrateSlugBtn\').click(function(e) {
    jQuery.post(
        \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\',
        {
            \'action\': \'slug_migrate\',
        },
        function(response){
            jQuery(\'#migrateSlugResult\').append(response);
        }
    );
});
</script>
<?php
}
add_action( \'wp_ajax_slug_migrate\', \'slug_migrate\' );
add_action( \'wp_ajax_nopriv_slug_migrate\', \'slug_migrate\' );

function slug_migrate( $taxonomy ) {
    // Taxonomies : recipe_category, recipe_type, recipe_event, product_category
    // Pour chaque term des taxonomies : Effectuer un sanitize_title() du name du term et l\'afficher


              // begin of code





              // end of code


        add_filter( \'editable_slug\', \'sanitize_slug\' );


    die();
}
PS:以下是我目前所做的,我不知道这是否是一个很好的理由,欢迎提供任何帮助:

$terms = get_terms( $post->ID, $catslug);?>

          <?php foreach($terms as $term) : ?>

                <?php if($term->slug !== $term->name){

                    $find = array(
                        $term->slug
                    );

                    $replace = array(
                        $term->name
                    );

                    $replace = array_map( \'sanitize_title\', $replace );

                    $permalink = str_replace( $find, $replace, $permalink );


                    echo $permalink;

                }?>

          <?php
            endforeach;
          ?>
嗨@chrisbergr

感谢您的帮助,我制作了一幅蒙太奇(图片)来描述我正在尝试的内容(事实上,我想动态更改我所有术语的名称,而不是手动进行):

enter image description here

1 个回复
SO网友:chrisbergr

就我所知,以下代码就是解决此问题所需的全部代码。

function my_function( $post_id ){
if ( ! wp_is_post_revision( $post_id ) ){
    $post = get_post( $post_id );
    $my_args = array(
        \'ID\'        => $post_id,
        \'post_name\' => \'\'
    );
    // unhook this function so it doesn\'t loop infinitely
    remove_action( \'save_post\', \'my_function\' );
    // update the post, which calls save_post again
    wp_update_post( $my_args );
    // re-hook this function
    add_action( \'save_post\', \'my_function\' );
}
}
add_action( \'save_post\', \'my_function\' );
请参见wp_update_post 在法典中。

我刚刚用块编辑器测试了WordPress 5.1中的代码。