闲得无聊玩玩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后台试了一下,居然真的可以用~~
详细讲下他的步骤:
- 在插件的主文件中添加以下代码,创建自定义文章类型,
这里我们创建了一个名为 “Ads” 的自定义文章类型。
-
创建自定义字段来保存广告信息。我们可以在
add_meta_box()函数中添加自定义字段。在这个示例中,我们注册了一个名为 “wpadmanager_ad_settings” 的元框,用于保存广告的设置。 - 在设置界面中添加展示次数的输入框。
- 保存设置。我们可以使用以下代码来保存广告的设置,这个函数将在广告信息保存时自动调用,保存广告的设置。
- 显示广告。我们可以在文章中显示广告,并控制每个广告的展示次数。
- 在前端文章页面中插入广告,可以使用以下代码
<?php wpadmanager_insert_ad( get_the_content() ); ?>这段代码应该放在文章内容的输出位置,例如可以放在
the_content()函数之后,或者放在文章的某个固定位置。最后,根据您的需求修改和调整插件代码。例如,您可以添加自定义样式或修改广告展示的逻辑。
需要注意的是,在代码中我们使用了 get_the_post_thumbnail() 函数来获取广告图片。这个函数默认获取 WordPress 中的 “特色图片”,因此你需要在广告位中上传一个图片作为 “特色图片”,才能在文章页面中展示广告。





没有回复内容