你敢信?我用ChatGPT写了一个广告位插件~~-zibll综合交流社区-zibll子比主题-zibll子比社区

你敢信?我用ChatGPT写了一个广告位插件~~

闲得无聊玩玩ChatGPT,用它来写一个插件

我的需求是:

他可以在wordpress文章中显示横幅图片广告,我可以在后台管理广告内容和设置允许被展现次数额度,当额度为0的广告将自动变为下架状态

他的代码:

<?php
/**
 * Plugin Name: WP Ad Manager
 * Plugin URI: https://example.com/
 * Description: A plugin to manage banner ads.
 * Version: 1.0
 * Author: Your Name
 * Author URI: https://example.com/
 */

// Add plugin code here
function wpadmanager_register_post_type() {
    $labels = array(
        'name' => __('Ads', 'wpadmanager'),
        'singular_name' => __('Ad', 'wpadmanager'),
    );
    $args = array(
        'labels' => $labels,
        'public' => false,
        'show_ui' => true,
        'supports' => array('title', 'thumbnail'),
    );
    register_post_type('wpadmanager_ad', $args);
}
add_action('init', 'wpadmanager_register_post_type');
function wpadmanager_register_meta_box() {
    add_meta_box('wpadmanager_ad_settings', __('Ad Settings', 'wpadmanager'), 'wpadmanager_render_ad_settings', 'wpadmanager_ad', 'side');
}
add_action('add_meta_boxes', 'wpadmanager_register_meta_box');
function wpadmanager_render_ad_settings($post) {
    $ad_settings = get_post_meta($post->ID, 'wpadmanager_ad_settings', true);
    $display_count = isset($ad_settings['display_count']) ? intval($ad_settings['display_count']) : 0;
    wp_nonce_field('wpadmanager_save_ad_settings', 'wpadmanager_save_ad_settings_nonce');
    ?>
    <p>
        <label for="wpadmanager_display_count"><?php _e('Display Count:', 'wpadmanager'); ?></label>
        <input type="number" id="wpadmanager_display_count" name="wpadmanager_ad_settings[display_count]" value="<?php echo $display_count; ?>" min="0">
    </p>
    <?php
}
function wpadmanager_save_ad_settings($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!wp_verify_nonce($_POST['wpadmanager_save_ad_settings_nonce'], 'wpadmanager_save_ad_settings')) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    $ad_settings = isset($_POST['wpadmanager_ad_settings']) ? $_POST['wpadmanager_ad_settings'] : array();
    update_post_meta($post_id, 'wpadmanager_ad_settings', $ad_settings);
}
add_action('save_post_wpadmanager_ad', 'wpadmanager_save_ad_settings');
function wpadmanager_insert_ad($content) {
    $ad_args = array(
        'post_type' => 'wpadmanager_ad',
        'meta_query' => array(
            array(
                'key' => 'wpadmanager_ad_settings',
                'compare' => 'EXISTS',
            ),
            array(
                'key' => 'wpadmanager_ad_settings',
                'value' => array(
                    'display_count' => '',
                ),
                'compare' => 'NOT EXISTS',
            ),
            array(
                'key' => 'wpadmanager_ad_settings',
                'value' => array(
                    'display_count' => 0,
                ),
                'compare' => '>',
                'type' => 'NUMERIC',
            ),
        ),
        'orderby' => 'rand',
        'posts_per_page' => 1,
    );
    $ads = get_posts($ad_args);
    if (empty($ads)) {
        return $content;
    }
    $ad = $ads[0];
    $ad_settings = get_post_meta($ad->ID, 'wpadmanager_ad_settings', true);
    $display_count = intval($ad_settings['display_count']);
    update_post_meta($ad->ID, 'wpadmanager_ad_settings', array('display_count' => $display_count - 1));
    $ad_content = '<div class="wpadmanager-ad">' . get_the_post_thumbnail($ad->ID, 'medium') . '</div>';
    return $ad_content . $content;
}
add_filter('the_content', 'wpadmanager_insert_ad');

然后我就传到wp后台试了一下,居然真的可以用~~

详细讲下他的步骤:

  1. 在插件的主文件中添加以下代码,创建自定义文章类型,

    这里我们创建了一个名为 “Ads” 的自定义文章类型。

  2. 创建自定义字段来保存广告信息。我们可以在 add_meta_box() 函数中添加自定义字段。在这个示例中,我们注册了一个名为 “wpadmanager_ad_settings” 的元框,用于保存广告的设置。

  3. 在设置界面中添加展示次数的输入框。
  4. 保存设置。我们可以使用以下代码来保存广告的设置,这个函数将在广告信息保存时自动调用,保存广告的设置。
  5. 显示广告。我们可以在文章中显示广告,并控制每个广告的展示次数。
  6. 在前端文章页面中插入广告,可以使用以下代码
    <?php wpadmanager_insert_ad( get_the_content() ); ?>

    这段代码应该放在文章内容的输出位置,例如可以放在 the_content() 函数之后,或者放在文章的某个固定位置。

    最后,根据您的需求修改和调整插件代码。例如,您可以添加自定义样式或修改广告展示的逻辑。

需要注意的是,在代码中我们使用了 get_the_post_thumbnail() 函数来获取广告图片。这个函数默认获取 WordPress 中的 “特色图片”,因此你需要在广告位中上传一个图片作为 “特色图片”,才能在文章页面中展示广告。

请登录后发表评论

    没有回复内容