I think you’re over thinking things. I’d simply create a new Custom Post in the plugin. That will come with it’s own backend automatically.
You can then create the individual pages based on the Template Hierarchy for both the listings and individual pages.
For any additional fields you need, you can either set the meta fields to show on the backend or add them via a plugin such as Advanced Custom Fields
Amend wp-query when searching to do queries on your metadata.
That should be enough to get you going.
I personally don’t like the way WordPress does things, so I’m not sure exactly how much separation you will be able to achieve. But a good rule of thumb I find is to try and use the built in functions as much as possible, rather than building your own solution.
Related Posts:
- How can I configure Docker for developing and deploying a custom theme?
- Custom theme sufficient or custom plugin neccessary for this feature set?
- How to create custom home page via plugin?
- Featured Image not showing in admin
- How Can I setup WP CLI on Windows development machine running AMPPS?
- WP_LOCALIZE_SCRIPT doesn’t work
- Are we allowed to use the Allman (BSD) indent style when coding WordPress plugins and themes?
- Customizer: widget-synced triggers twice
- WordPress not working on localhost
- Why in this archive page that call query_posts() function show only the last 10 posts?
- How to replace settings in WordPress plugin from a theme
- How to remove/replace current page template?
- Setting a post’s category
- Want to know how to reveal a WordPress theme, considering the theme name is hidden?
- Metabox types list
- Rate limiting ajax requests in WordPress
- Determine if the current page, is being edited
- Managing Custom Designed Content
- Best practice: What belongs in theme and what in plugin for large eCommerce website
- Adding class to the parent of current-post-ancestor / current-menu-parent / current-post-parent
- Is Explicit Versioning a better alternative to Semantic Versioning for wordpress?
- Is there any other ways to replicating changes on live from staging without pushing from git
- How to access noticeOperations from withNotices
- How to hook a custom user function to a wordpress core ajax action?
- How can I turn a custom wordpress page into a product page?
- Elementor custom Query with ACF fields to show matching woocommerce products custom fields
- WP Gutenberg Blocks – How to limit first/root blocks
- How to get boolean value from register_meta properly?
- what is the difference between these phares?
- How can we display product price $104 on the cart while the credit card payment method is checked?
- Form doesnt save to database
- Notice: Trying to get property ‘term_id’ of non-object
- Incorporate small angular feature in my wordpress site
- What is the proper method of using global $post?
- How developed with version control word press site on shared host? [closed]
- How to Bind one post object Type with other postobject Type in Advanced Custom field [closed]
- How to export post meta with images in wordpress
- Password field is empty when using wp_signon();
- How to change title tag at page after loaded post?
- Following WordPress Markup Is mandatory, got awkward resultyby wordpress standard markup?
- How do I create plugin or theme using MVC pattern?
- How to limit number of number of categories displayed by categories widget
- Search: how to extend the existing search to include a custom table
- Is there documentation reference for forms in menu and setting pages?
- PowerPress mobile media player
- When is the proper time to minify css and js with git workflow?
- Strange Situation When Try To Retrieve Github Gist Using wp_remote_get
- How to hide or rename “X” and “x-child” references in website source?
- WordPress custom taxonomy check box to dropdown
- How to Get Current Custom Post Type Associated Taxonomy Term
- Plugin templates vs Parent Theme
- Selectively update themes in WordPress multisite
- Widget HTML Display Problem
- How to create a backend for a custom theme?
- wp_nonce_field displaying twice
- Enqueue script globally
- Redirect to another page using contact form 7? [closed]
- Warning: include(): https:// wrapper is disabled in the server configuration by allow_url_include=0
- How to modify files inside wp-includes directory in wordpress
- How should I go about registering JavaScript that isn’t a file? [duplicate]
- Plugin is not generating title tags on any pages or posts
- Is it necessary to do validation again when retrieving data from database?
- How to Control CSS of Admin On Creating only a Specific Custom Post Type
- Can’t change the style of a submit input type? [closed]
- Make a plugin page out of influence of the theme’s style
- Update Data parameter of a wp_localize_script() call
- How to obtain the current website URL in my theme?
- What exactly do this function declared into functions.php file of a WP theme?
- How to set a cookie for logged in users to md5($user->ID . “my_secret”)?
- WP Plugin Running before jQuery
- Template directory in plugin
- Plugin: database creation
- Loading Modernizr (or other JavaScript libraries) for use in a plugin
- get_the_tags with separator control?
- How to only load css for used blocks on frontend
- 400 Bad Request, in wordpress theme development, wp_ajax
- Add child pages to submenu automatically
- Show message from backend
- my own SVN for a plugin/theme
- Issue on Setting $icon_url Parameter on WP add_menu_page()
- Why enqueue styles on hook?
- Create Widget or Enable Shortcodes in Sidebar
- Getting a WordPress Debug Strategy
- unable to wp_enqueue_script(‘suggest’);
- Drawing the line between theme & plugin on large scale bespoke projects
- Apply styles to blockquote element with the WYSIWYG editor
- PHP File_exist() not working – Checking if File Exist in WordPress Theme Directory
- Why would you use esc_attr() on internal functions?
- Invalid hook call on save, not edit when using swiper slider
- Proper way to use useSelect
- Conditional Generation of Image Sizes using add_image_size
- How to add plugin options in wp editor page
- Ajax: Populate with content from a post’s ID not working – duplicating current page html instead
- How to find where an object first instantiatiation
- Gutenberg blocks error: Each child in a list should have a unique “key” prop
- Logout after clicking URL link results in “headers already sent” error
- Full documentation about $args for register_rest_route?
- WP Still Generating 150×150 Thumbnail Size Even After Un-Setting Small Size in Functions.php
- modify show UI of a registered taxonomy
- Using function from enqueued .js file in theme in plugin?