Debug Output:
Post ID: 932
Post Type: wpcode
Post Status: draft
Post Title: Post submit shortcode B
Post Content:
function custom_post_form_shortcode() {
    if (!is_user_logged_in()) return '<div style="padding:15px; margin-top:50px;" class="notice-div-wrapper"><div style="text-align:center;background:#333; padding:15px 5px; border-radius:10px;" class="notice-div">You must be logged in to create a post.<p style="text-align:center; margin-top:-10px;"><button style="" onclick="userlogin()" class="notice-btn-left">Login »</button><span style="padding-left:12px;"><button style="background:grey;color:black !important;" onclick="addpost()" class="notice-btn-right">« Back</button></span></p></div></div>';

	$user = wp_get_current_user();  
$is_pro = in_array('pro', $user->roles);

// ✅ Post limit check here is 100% fine
if (!$is_pro) {
    $args = [
        'author' => $user->ID,
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => [['after' => '24 hours ago']],
        'posts_per_page' => 1
    ];
    $recent_query = new WP_Query($args);
    if ($recent_query->have_posts()) {
        return '<div style="padding:25px; margin-top:50px;" class="notice-div-wrapper"><div style="text-align:center;background:#333; padding:15px 5px; border-radius:10px;" class="notice-div">You have reached the once daily limit for posting. To post more than once daily kindly verify your account using the button below<p style="text-align:center; margin-top:0px;"><button style="" onclick="userverify()" class="notice-btn-left">Verify Now »</button><span style="padding-left:12px;"><button style="background:grey;color:black !important;" onclick="addpost()" class="notice-btn-right">« Back</button></span></p></div></div>';
    }
}
	
    $nonce = wp_create_nonce('custom_post_form_nonce');
    ob_start();
    ?>
    <form id="custom-post-form">
        <div>
            <textarea style="color: #000;" name="post_excerpt" required rows="3" placeholder="What's on your mind?..."></textarea>
        </div>

        <div id="content-area">
            <div id="media-preview" class="media-scroll">
                <div id="upload-box" class="media-box upload-box">+</div>
            </div>

            <input id="post_content" name="post_content" type="hidden" />
            <input id="media-upload" style="display: none;" accept="image/*,video/*" type="file" />
            <input id="auto-category" name="post_category" type="hidden" />
            <input id="featured_data" name="featured_data" type="hidden" />

            <div class="meta-field" style="display:none;">
                <select name="meta_field_value" id="meta_field_value">
                    <option value="">Select type (optional)</option>
                    <option value="funny30">Funny30</option>
                    <option value="movie">Movie</option>
                    <option value="skit">Skit</option>
                    <option value="edu">Education</option>
                    <option value="others">Others</option>
                </select>
                <input type="hidden" name="meta_field_key" value="type">
            </div>
        </div>

        <div class="form-actions">
            <div id="media-toggle" onclick="mediatoggle ()"><i class="fas fa-image"></i></div>
            <button type="submit" id="publish-button">Publish</button>
            <button type="button" id="cancel-button" onclick="pbtn()">Cancel</button>
        </div>
    </form>

    <div id="custom-confirm-overlay">
        <div id="custom-confirm-box">
            <p class="confirm-message">Remove this media?</p>
            <div class="buttons">
                <button id="confirm-no">Cancel</button>
                <button id="confirm-yes">Remove</button>
            </div>
        </div>
    </div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.0/Sortable.min.js"></script>
    <script>
    document.addEventListener('DOMContentLoaded', () => {
        const ajaxUrl = "<?= admin_url('admin-ajax.php') ?>";
        const nonce = "<?= esc_js($nonce) ?>";

        const mediaInput = document.getElementById('media-upload');
        const uploadBox = document.getElementById('upload-box');
        const publishButton = document.getElementById('publish-button');
        const previewContainer = document.getElementById('media-preview');
        const featuredInput = document.getElementById('featured_data');
        const metaField = document.querySelector('.meta-field');

        let mediaFiles = [], mediaElements = [], mediaSizes = [], mediaStatusLabels = [];
        let videoPosterBlob = null;
        let firstImageUrl = null;

        const confirmOverlay = document.getElementById('custom-confirm-overlay');
        let confirmCallback = null;

        function humanSize(bytes) {
            const mb = bytes / (1024 * 1024);
            return mb > 1 ? mb.toFixed(1) + 'MB' : (bytes / 1024).toFixed(0) + 'KB';
        }

        function showConfirmDialog(msg, callback) {
            confirmOverlay.querySelector('.confirm-message').textContent = msg;
            confirmCallback = callback;
            confirmOverlay.style.display = 'flex';
        }

        document.getElementById('confirm-no').onclick = () => {
            confirmOverlay.style.display = 'none';
            confirmCallback = null;
        };
        document.getElementById('confirm-yes').onclick = () => {
            if (typeof confirmCallback === 'function') confirmCallback();
            confirmOverlay.style.display = 'none';
        };

        uploadBox.addEventListener('click', () => {
            if (!uploadBox.classList.contains('disabled')) mediaInput.click();
        });

        mediaInput.addEventListener('change', () => {
            const file = mediaInput.files[0];
            if (!file) return;

            const isVideo = file.type.startsWith('video');
            const isImage = file.type.startsWith('image');
            const videoCount = mediaFiles.filter(f => f.type.startsWith('video')).length;
            const imageCount = mediaFiles.filter(f => f.type.startsWith('image')).length;

            if ((isVideo && (videoCount > 0 || imageCount > 0)) ||
                (isImage && (videoCount > 0 || imageCount >= 5))) return;

            previewMedia(file);
            updateUploadBoxState();
        });

        function updateUploadBoxState() {
            const videoCount = mediaFiles.filter(f => f.type.startsWith('video')).length;
            const imageCount = mediaFiles.filter(f => f.type.startsWith('image')).length;
            uploadBox.classList.toggle('disabled', videoCount > 0 || imageCount >= 5);
        }

        function previewMedia(file) {
            const reader = new FileReader();
            reader.onload = () => {
                const blobUrl = reader.result;
                const wrapper = document.createElement('div');
                wrapper.className = 'media-box';
                wrapper.dataset.filename = file.name;
                wrapper.setAttribute('draggable', 'true');

                const removeBtn = document.createElement('div');
                removeBtn.className = 'remove-media';
                removeBtn.innerHTML = '<i class="fa fa-trash"></i>';
                removeBtn.title = 'Remove';
                removeBtn.onclick = (e) => {
                    e.stopPropagation();
                    showConfirmDialog("Remove this media?", () => {
                        const index = mediaFiles.findIndex(f => f.name === file.name);
                        if (index !== -1) {
                            mediaFiles.splice(index, 1);
                            mediaElements.splice(index, 1);
                            mediaSizes.splice(index, 1);
                            mediaStatusLabels.splice(index, 1);
                        }
                        wrapper.remove();
                        updateUploadBoxState();
                        toggleMetaField();
                    });
                };

                const sizeDiv = document.createElement('div');
                sizeDiv.className = 'media-size';
                sizeDiv.textContent = humanSize(file.size);

                const statusDiv = document.createElement('div');
                statusDiv.className = 'media-status';

                if (file.type.startsWith('image')) {
                    wrapper.innerHTML = `<img src="${blobUrl}" />`;
                    if (!firstImageUrl) firstImageUrl = null;
                } else if (file.type.startsWith('video')) {
                    const video = document.createElement('video');
                    video.src = blobUrl;
                    video.muted = true;
                    video.playsInline = true;
                    video.preload = 'auto';

                    video.addEventListener('loadeddata', () => {
                        if (video.readyState >= 2) video.currentTime = 0.5;
                    });

                    video.addEventListener('seeked', () => {
                        const canvas = document.createElement('canvas');
                        canvas.width = video.videoWidth;
                        canvas.height = video.videoHeight;
                        const ctx = canvas.getContext('2d');
                        ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
                        canvas.toBlob(blob => {
                            videoPosterBlob = blob;
                        }, 'image/jpeg', 0.9);
                    });

                    wrapper.innerHTML = '';
                    wrapper.appendChild(video);
                }

                wrapper.appendChild(removeBtn);
                wrapper.appendChild(sizeDiv);
                wrapper.appendChild(statusDiv);
                previewContainer.insertBefore(wrapper, uploadBox);

                mediaFiles.push(file);
                mediaElements.push(wrapper);
                mediaSizes.push(sizeDiv);
                mediaStatusLabels.push(statusDiv);

                toggleMetaField();
            };
            reader.readAsDataURL(file);
        }

        function toggleMetaField() {
            const hasVideo = mediaFiles.some(f => f.type.startsWith('video'));
            metaField.style.display = hasVideo ? 'block' : 'none';
        }

        new Sortable(previewContainer, {
            animation: 150,
            ghostClass: 'dragging',
            filter: '.upload-box',
            handle: '.media-box',
            delay: 150,
            delayOnTouchOnly: true,
            onEnd: () => {
                const order = [...previewContainer.querySelectorAll('.media-box:not(.upload-box)')];
                mediaElements = order;
                mediaFiles = order.map(div => mediaFiles.find(f => f.name === div.dataset.filename));
                mediaSizes = order.map(div => div.querySelector('.media-size'));
                mediaStatusLabels = order.map(div => div.querySelector('.media-status'));
            }
        });

        document.getElementById('custom-post-form').addEventListener('submit', async function(e) {
            e.preventDefault();
            publishButton.disabled = true;
            publishButton.textContent = 'Posting...';

            const contentParts = [];

            for (let i = 0; i < mediaFiles.length; i++) {
                const file = mediaFiles[i];
                const sizeDisplay = mediaSizes[i];
                const statusDisplay = mediaStatusLabels[i];

                sizeDisplay.textContent = humanSize(file.size);
                statusDisplay.textContent = 'Uploading...';

                const uploadForm = new FormData();
                uploadForm.append('action', 'custom_upload_media');
                uploadForm.append('media_file', file);
                uploadForm.append('_wpnonce', nonce);

                const res = await new Promise((resolve) => {
                    const xhr = new XMLHttpRequest();
                    xhr.open('POST', ajaxUrl);
                    xhr.upload.onprogress = (e) => {
                        if (e.lengthComputable) {
                            sizeDisplay.textContent = `${humanSize(e.loaded)} / ${humanSize(e.total)}`;
                        }
                    };
                    xhr.onload = () => resolve(JSON.parse(xhr.responseText));
                    xhr.onerror = () => resolve({ success: false });
                    xhr.send(uploadForm);
                });

                if (!res.success) {
                    alert('Upload failed.');
                    publishButton.disabled = false;
                    publishButton.textContent = 'Publish';
                    return;
                }

                const url = res.data.url;
                if (file.type.startsWith('image')) {
                    if (!firstImageUrl) firstImageUrl = url;
                    contentParts.push(`<img src="${url}" style="max-width:100%">`);
                } else if (file.type.startsWith('video')) {
                    contentParts.push(`[video mp4="${url}"][/video]`);
                }
            }

            document.getElementById('post_content').value = contentParts.join("\n");

            const finalContent = contentParts.join("\n");
            const formData = new FormData(this);

            if (finalContent.includes('<img')) {
                formData.set('post_category', 'gallery');
                if (firstImageUrl) formData.set('featured_data', firstImageUrl);
            } else if (finalContent.includes('[video')) {
                formData.set('post_category', 'videos');
                if (videoPosterBlob) {
                    const reader = new FileReader();
                    reader.onloadend = () => {
                        formData.set('featured_data', reader.result);
                        finishPostSubmit(formData);
                    };
                    reader.readAsDataURL(videoPosterBlob);
                    return;
                }
            } else {
                formData.set('post_category', 'text');
            }

            finishPostSubmit(formData);
        });

        function finishPostSubmit(formData) {
            formData.append('action', 'custom_submit_post');
            fetch(ajaxUrl, {
                method: 'POST',
                body: formData
            }).then(res => res.json()).then(data => {
                if (data.success) {
                    publishButton.textContent = 'Posted';
                    window.location.href = data.data.redirect_url;
                } else {
                    alert(data.data.message || 'Post failed');
                    publishButton.disabled = false;
                    publishButton.textContent = 'Publish';
                }
            });
        }
    });
    </script>

    <?php
    return ob_get_clean();
}
add_shortcode('custom_post_form', 'custom_post_form_shortcode');

Please log in to view your profile.