用ChatGPT 4写代码及debug

目录

第一次写代码(2023.11.28)

我对真正的编程其实并太擅长,我所擅长的HTML和CSS其实根本都不是编程,仅仅是一些标记语言而已(markup language)。

很多年前也尝试好好学习一下编程,但后面放弃了,不过我能看懂一点点PHP语言。

之前一直听说ChatGPT 4写代码的能力非常强悍,虽然我从来没有亲自尝试过,但我当然相信全球那么多的程序员咯。

我没有尝试的原因是一直也没有找到一个真实的使用场景,因为我觉得要能真实的解决实际问题的代码才更有意义。不过我今天终于碰到一个机会,并且为之感到大大的震惊,事情是这样的:

我想在bens.love的网站的文章上显示一个数据,就是我我对某篇文章进行过了多少次更新或修改。

我知道在wordpress的后台有这个数据,而且我也知道这个东西叫做revision,我也知道肯定有一种方式把这个数据展示在网站前台。

不过我之前可能尝试过2次,但都没有找到一个比较好的方式。今天我再次跟这个老问题迎面相遇,所以刚才择日不如撞日,现在马上立刻来解决一下,然后下面是我尝试过的方式:

  1. Google一下看看是否有解决这个问题的plugin
    结果没有相应的plugin, 因为这个事情可能太小或者没有使用场景,所以根本不值得做一个插件
  2. 我发现增加短码shortcode是一个最可行的方式
    我查了Google,看了StackExchange,访问了七八个页面,发现有一些可以完成这个事情的PHP代码和短码,我尝试用到网站上,一个代码报错,一个代码不是我想要的东西,前后可能用了15-20分钟

就在我准备放弃的时候,我突然想到了ChatGPT4,我前后输入了3个简单的prompt就把问题完美解决了(我后面想了一下其实一个prompt就可以解决战斗了),这个是我的chatGPT的 链接分享

Ben

I am using wordpress, and I want to display public revisions count, and I want to make that php code into a shortcode. and what I really need is the public revision, so I don't want the auto save is counted

ChatGPT

function get_public_revision_count_shortcode($atts) {
    // Extract attributes and set default values
    $atts = shortcode_atts(array(
        'post_id' => get_the_ID(), // default to the current post
    ), $atts);

    $revisions = wp_get_post_revisions($atts['post_id']);
    $public_revisions_count = 0;

    foreach ($revisions as $revision) {
        // Skip if the revision is an autosave
        if (wp_is_post_autosave($revision)) {
            continue;
        }

        $public_revisions_count++;
    }

    return '更新次数:' . $public_revisions_count;
}
add_shortcode('display_public_revisions_count', 'get_public_revision_count_shortcode');

上面是ChatGPT 4给我的代码,还有很多非常proactive和周到的提醒。

功能实现后,我就立马开始写这篇文章,因为我不想让我的感觉变淡或感动丢失:

  1. 我第一次对ChatGPT4写代码有了第一手的体会,这比听很多程序员告诉我要来得更有冲击力和说服力,同时我表示非常之佩服
  2. ChatGPT4的代码写得真是专业和优雅,特别是对代码的标注和解释,那是高级程序员才弄得出来的东西
  3. ChatGPT4在proactive和over-communication上做的非常好,非常符合我的胃口,因为我就是一个over-communicator,所以当我看到GPT给我的回复,我会有点感动
  4. 虽然我不是程序员,但我在想ChatGPT4给初级程序员、中级程序员、高级程序员带来的都是什么影响?

第二次写代码(2023.12.04)

第二是也是写一个短码,不过要实现的相对比较复杂。那个功能是我很久之前就想实现的一个功能,我知道一个大型插件可以做,但我不想用那么重型的插件,然后我记得我也找过相应的解决方法,但没成功。

这次我把问题和需求告诉GPT后,我就拿到了代码,然后我在真实的网站上使用了一下,成功。

所以第二次让GPT写代码,给我的感觉非常好。

我之后会让GPT在那个代码的基础上,再增加一些条件设定,那样我就有一大段可以真正投入商业使用的代码了。

Ben

我在使用wordpress的时候,我想在page或post中嵌入其他post, page, 或custom post type,但是我希望可以实现下面几个需求: 
1. 我想用短码的形式进行嵌入 
2. 我可以在短码中通过使用post ID的形式来指明我所要嵌入的post 
3. 我可以完全自定义这个嵌入的内容的格式,也就是说,我希望可以控制它的HTML结构
4. 自定义HTML结构那里,展示:post title, featured image, post 摘要post title

ChatGPT

function custom_embed_post_shortcode($atts) {
    // 获取短码属性(如post ID)
    $atts = shortcode_atts(array(
        'id' => ''
    ), $atts);

    $post_id = $atts['id'];

    // 获取post内容
    $post = get_post($post_id);
    if (!$post) {
        return 'Post not found';
    }

    // 获取特色图片
    $featured_image = '';
    if (has_post_thumbnail($post_id)) {
        $featured_image = get_the_post_thumbnail($post_id, 'full');
    }

    // 获取摘要
    $excerpt = !empty($post->post_excerpt) ? $post->post_excerpt : wp_trim_words($post->post_content, 55, '...');

    // 自定义HTML结构
    $output = '<div class="custom-embed">';
    $output .= '<h2>' . esc_html($post->post_title) . '</h2>';
    $output .= $featured_image; // 显示特色图片
    $output .= '<p>' . esc_html($excerpt) . '</p>'; // 显示摘要
    $output .= '</div>';

    return $output;
}

add_shortcode('custom_embed_post', 'custom_embed_post_shortcode');

第三次写代码(2023.12.11)

我尝试解决一个问题,我有思路,不过那个的确是需要写点代码,这次也是让我挺惊艳的

Ben

我现在用acf创建了一个叫做toc_trigger的field,这个是一个radio button,有两个选项,一个是Hide TOC,另外一个是Show TOC。
1. 当我选择 Show TOC 的时候,需要在<body>的class中增加一个叫做“show-toc”的class 
2. 当我选择 Hide TOC 的时候或者没有做任何选择的时候,在<body>的class中不需要有任何变化

ChatGPT

function add_toc_body_class( $classes ) {
    if ( is_single() || is_page() ) {
        $toc_trigger = get_field('toc_trigger');
        if ( $toc_trigger === 'Show TOC' ) {
            $classes[] = 'show-toc';
        }
    }
    return $classes;
}
add_filter( 'body_class', 'add_toc_body_class' );

第一次debug(2023.12.13)

在elementor碰到一个奇怪的问题,我已经尝试用staging来解决,还是不行。我估计一步一步排除是肯定可以解决的,不过可能需要2-4个小时。

Ben

elementor 下面的theme builder的 archive 没有显示我所创建的Custom Post Type,这是为什么

ChatGPT

当 Elementor 的 Theme Builder 中没有显示你所创建的自定义文章类型(Custom Post Type, CPT)时,可能是由以下几个原因导致的:

1. Custom Post Type 设置问题:
确保在创建 CPT 时,将其设置为公开('public' => true)并启用了归档('has_archive' => true)。这些设置通常在注册 CPT 的代码中进行。

2. Elementor 兼容性问题:
确保 Elementor(包括 Elementor Pro,如果已安装)与当前的 WordPress 版本以及其他插件(如 ACF Pro)兼容。

3. CPT 未正确注册:
如果你是在主题的 functions.php 文件或自定义插件中注册 CPT,请确保没有语法错误,并且代码是在正确的钩子(如 init 钩子)上执行的。

4. 永久链接设置:
尝试在 WordPress 后台的“设置”>“永久链接”中重新保存设置。这有时可以刷新系统并使新的 CPT 出现。

5. 缓存问题:
如果你的网站使用了缓存插件或服务,请清除缓存。有时缓存会导致后台更改延迟反映在前端和编辑器中。

6. 主题或插件冲突:
尝试禁用其他插件,特别是可能影响 CPT 的插件,以检查是否存在插件冲突。同时,也可以尝试切换到默认主题(如 Twenty Twenty-One),看看问题是否仍然存在。

7. 查看 WordPress 和 Elementor 日志:
检查 WordPress 和 Elementor 的错误日志,看是否有相关的错误提示。

8. Elementor 设置:
在 Elementor 的主题构建器中,仔细检查是否选择了正确的条件和设置,以确保它能识别和使用你的 CPT。

然后呵呵,第一个方案就是解决方法,我太佩服了!

第二次Debug(2024.1.3)

Ben

我在wordpress创建了一个叫做product的custom post type,我也创建一个相应product tag和product category的taxonomy,但是我在menu那里可以看到product tag,但是看不到product category,请问这是怎么回事?怎么解决?

ChatGPT

  1. 检查WordPress版本
    • 确保您的WordPress版本是最新的。有时候,老旧的版本可能会有一些兼容性问题或bug。
  2. 检查自定义分类法(Taxonomy)的注册
    • 确保在注册自定义分类法时,为其指定了正确的参数。特别是show_in_nav_menus参数,它必须设置为true,以便在导航菜单中显示。
  3. WordPress后台设置
    • 在WordPress的后台,进入“外观” > “菜单”,在屏幕顶部有一个“选项”按钮。点击它,确保“产品分类”被选中为要显示的项目。
  4. 清理缓存
    • 如果您的网站使用了缓存插件,尝试清理缓存。有时候,缓存可能导致显示问题。
  5. 检查主题兼容性
    • 检查您当前使用的主题是否支持自定义分类法。有些主题可能需要额外的设置或代码更改来支持自定义的内容类型和分类法。
  6. 插件冲突
    • 检查是否安装了某些可能与自定义分类法冲突的插件。尝试暂时禁用一些插件,看看是否解决了问题。
  7. 重新保存永久链接设置
    • 有时候,重新保存WordPress的永久链接设置可以解决一些问题。在后台进入“设置” > “永久链接”,然后点击“保存更改”即可。

解决方法:第3点。这个是我大意了,没想到。不过ChatGPT提醒我后就知道了。另外,第7点也说得非常好。

相关内容

暂无与之相关的内容

3 Responses

    1. 是滴,我已经第二次感受到了。所以要把用这个文章来记录我是用GPT写代码的经历和感受

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

搜索网站内容(但不一定能搜索得到)

订阅bens.love的newsletter