{"id":351757,"date":"2026-08-11T14:17:17","date_gmt":"2026-08-11T14:17:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/efeoem\/"},"modified":"2026-08-11T19:49:09","modified_gmt":"2026-08-11T19:49:09","slug":"efeoem","status":"publish","type":"plugin","link":"https:\/\/hau.wordpress.org\/plugins\/efeoem\/","author":23546507,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.8","stable_tag":"1.4.8","tested":"7.0.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"EfeOEM","header_author":"Efendi Medya","header_description":"Match products by OEM code, your own stock code, competitor cross-reference codes, and superseded numbers, all through one smart search box. Suitable for any business selling automotive parts, industrial equipment, or spare parts.","assets_banners_color":"636e81","last_updated":"2026-08-11 19:49:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/efendimedya.com\/","header_author_uri":"https:\/\/efendimedya.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":60,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.4":{"tag":"1.2.4","author":"efemed","date":"2026-08-11 14:56:18"},"1.4.8":{"tag":"1.4.8","author":"efemed","date":"2026-08-11 19:49:09"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3642166,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3642166,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3642166,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3642166,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.4","1.4.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3642177,"resolution":"1","location":"assets","locale":"","width":1200,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3642177,"resolution":"2","location":"assets","locale":"","width":1200,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3642177,"resolution":"3","location":"assets","locale":"","width":1200,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3642177,"resolution":"4","location":"assets","locale":"","width":1200,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3642177,"resolution":"5","location":"assets","locale":"","width":1200,"height":800}},"screenshots":{"1":"Front-end smart search box with brand filter \u2014 a code search returns matching products instantly.","2":"Product edit screen \u2014 the code matching meta box with OEM codes, cross-reference codes, and superseded numbers.","3":"Bulk CSV import screen for migrating an existing catalog.","4":"Products list with automatic Rank Math SEO integration.","5":"Brand \/ Compatibility taxonomy screen (hierarchical brand &gt; model structure).","6":"Settings page \u2014 results per page, URL slugs, native search integration, and live preview field controls."}},"plugin_section":[],"plugin_tags":[2777,275210,275209,944,197315],"plugin_category":[],"plugin_contributors":[275211,78154],"plugin_business_model":[],"class_list":["post-351757","plugin","type-plugin","status-publish","hentry","plugin_tags-catalog","plugin_tags-cross-reference","plugin_tags-oem","plugin_tags-search","plugin_tags-spare-parts","plugin_contributors-efemed","plugin_contributors-freemius","plugin_committers-efemed"],"banners":{"banner":"https:\/\/ps.w.org\/efeoem\/assets\/banner-772x250.png?rev=3642166","banner_2x":"https:\/\/ps.w.org\/efeoem\/assets\/banner-1544x500.png?rev=3642166","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/efeoem\/assets\/icon-128x128.png?rev=3642166","icon_2x":"https:\/\/ps.w.org\/efeoem\/assets\/icon-256x256.png?rev=3642166","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/efeoem\/assets\/screenshot-1.png?rev=3642177","caption":"Front-end smart search box with brand filter \u2014 a code search returns matching products instantly."},{"src":"https:\/\/ps.w.org\/efeoem\/assets\/screenshot-2.png?rev=3642177","caption":"Product edit screen \u2014 the code matching meta box with OEM codes, cross-reference codes, and superseded numbers."},{"src":"https:\/\/ps.w.org\/efeoem\/assets\/screenshot-3.png?rev=3642177","caption":"Bulk CSV import screen for migrating an existing catalog."},{"src":"https:\/\/ps.w.org\/efeoem\/assets\/screenshot-4.png?rev=3642177","caption":"Products list with automatic Rank Math SEO integration."},{"src":"https:\/\/ps.w.org\/efeoem\/assets\/screenshot-5.png?rev=3642177","caption":"Brand \/ Compatibility taxonomy screen (hierarchical brand &gt; model structure)."}],"raw_content":"<!--section=description-->\n<p>EfeOEM is a WordPress plugin for businesses that sell spare parts, industrial equipment, or any product catalog that needs cross-reference code matching.<\/p>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>Add unlimited OEM codes per product<\/li>\n<li>Cross-reference \/ competitor brand code matching<\/li>\n<li>Superseded (old) number tracking<\/li>\n<li>Hierarchical Brand &gt; Model compatibility taxonomy<\/li>\n<li>Single search box that matches all code types plus the product title<\/li>\n<li>Automatic SEO description enrichment when Rank Math is active<\/li>\n<li>No dependency on Advanced Custom Fields or any other plugin \u2014 works right after activation<\/li>\n<li>Bulk CSV import tool for migrating existing catalogs<\/li>\n<li>Live search product previews with configurable image, title, OEM, stock code, brand, compatibility, price, stock status, and button fields<\/li>\n<li>Customizable preview heading, field labels, and automatic hiding of empty values<\/li>\n<li>English source interface with an included Turkish translation and a POT template for additional languages<\/li>\n<li>Separator-insensitive code matching: dots, dashes, spaces, slashes, underscores, and common punctuation can be ignored when searching codes<\/li>\n<li>Relevance ranking that prioritizes exact stock\/OEM\/cross-reference\/previous-number matches over partial and title matches<\/li>\n<li>Live preview shows which code type and exact product code matched the search<\/li>\n<\/ul>\n\n<p><strong>How to use:<\/strong><\/p>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to the \"EfeOEM Products\" menu to start adding products.<\/li>\n<li>For each product, enter the OEM codes, cross-reference codes, and compatible brands\/models.<\/li>\n<li>Add the <code>[efeoem_search]<\/code> shortcode to any page to publish the smart search box.<\/li>\n<\/ol>\n\n<h3>External Services<\/h3>\n\n<p>EfeOEM includes the Freemius SDK to provide licensing, account\/upgrade screens, paid-plan features, and optional usage diagnostics. Premium builds may also use Freemius for premium update delivery.<\/p>\n\n<p>When an administrator chooses to connect\/opt in, the plugin may send site and environment information such as the site URL, WordPress\/PHP\/plugin versions, and administrator\/account information required by Freemius. The permissions requested are shown on the Freemius opt-in screen before consent. If the administrator skips the opt-in, optional usage tracking is not enabled. Paid-license, billing, account, and update operations may still communicate with Freemius when those features are used.<\/p>\n\n<p>This service is provided by Freemius Inc.:\n* Terms of Service: https:\/\/freemius.com\/terms\/\n* Privacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/efeoem<\/code> directory, or install the plugin directly through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Start adding products from the \"EfeOEM Products\" menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20advanced%20custom%20fields%20%28acf%29%3F\"><h3>Do I need Advanced Custom Fields (ACF)?<\/h3><\/dt>\n<dd><p>No. EfeOEM uses its own data structure and does not require any additional plugin.<\/p><\/dd>\n<dt id=\"is%20rank%20math%20required%3F\"><h3>Is Rank Math required?<\/h3><\/dt>\n<dd><p>No. If Rank Math is active, the integration is enabled automatically; if not, the plugin continues to work normally.<\/p><\/dd>\n<dt id=\"is%20efeoem%20translatable%3F\"><h3>Is EfeOEM translatable?<\/h3><\/dt>\n<dd><p>Yes. English is the canonical source language. A complete Turkish translation is included, and the plugin ships with a POT template for additional languages.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20search%20box%3F\"><h3>How do I add the search box?<\/h3><\/dt>\n<dd><p>Add the <code>[efeoem_search]<\/code> shortcode to any page or post.<\/p><\/dd>\n<dt id=\"can%20i%20import%20products%20in%20bulk%3F\"><h3>Can I import products in bulk?<\/h3><\/dt>\n<dd><p>Yes. Use the \"Import\" screen under the EfeOEM Products menu to upload a CSV file with your product codes.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>Fixed the EfeOEM brand icon shown on Settings and Import screens.<\/li>\n<li>Added a cache-safe brand icon asset filename while keeping the legacy icon synchronized.<\/li>\n<li>Corrected the internal EFEOEM_VERSION constant to match the plugin release.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>Fixed WordPress admin menu icon sizing.<\/li>\n<li>Moved Freemius account and upgrade navigation into tabs to reduce sidebar clutter.<\/li>\n<li>Improved Freemius redirects to open the EfeOEM settings page directly.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Fixed Freemius admin menu routing for the EfeOEM custom post type settings page.<\/li>\n<li>Prefixed result-card template variables to comply with WordPress coding standards.<\/li>\n<li>Plugin Check cleanup and maintenance improvements.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Added keyboard navigation for live search results (Arrow Up\/Down and Enter).<\/li>\n<li>Added visible result counts to live search.<\/li>\n<li>Added separator-aware highlighting for matched OEM and part codes.<\/li>\n<li>Improved accessibility with search\/list ARIA attributes and keyboard-friendly result navigation.<\/li>\n<li>Added Search Engine 2.0 with separator-insensitive OEM, stock, cross-reference, and previous-number matching.<\/li>\n<li>Searches such as 81.50804.6075, 81-50804-6075, 81 50804 6075, and 81508046075 can now resolve to the same stored code without rewriting existing product data.<\/li>\n<li>Added relevance scoring so exact stock-code and OEM matches are placed before partial code and product-title matches in live search.<\/li>\n<li>Added a configurable \u201cMatched by\u201d row to live preview cards showing the matched code type and original stored code.<\/li>\n<li>Added a reusable code normalizer for future import, API, and lookup-index features.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Switched all plugin source UI strings to English as the canonical source language.<\/li>\n<li>Added a complete Turkish translation and a POT template for future community\/local translations.<\/li>\n<li>Added bundled translation loading from the standard \/languages directory while preserving WordPress language-pack precedence.<\/li>\n<li>Standardized live-preview defaults, labels, and new-install URL slug defaults for international installations.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Added optional manual Price and Stock Status fields for standalone EfeOEM products so enabled preview fields have a native data source.<\/li>\n<li>Preview list headings are now shown only when products are found.<\/li>\n<li>Corrected and expanded the readme documentation for the Live Search &amp; Product Preview feature.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added Live Search &amp; Product Preview cards with compact product thumbnails and configurable result fields.<\/li>\n<li>Added per-field visibility controls for product image, product name, OEM code, stock code, brand, compatibility, price, stock status, and the product link button.<\/li>\n<li>Added customizable preview heading, field labels, button text, empty-field hiding, and minimum search character settings.<\/li>\n<li>Added responsive preview-card styling and helper functions for compatibility, price, and stock summaries.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Replaced the dynamically interpolated SQL placeholder list in OEM code search with explicit prepared placeholders for all fixed EfeOEM meta keys, resolving WordPress.DB.PreparedSQL.InterpolatedNotPrepared.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Updated the WordPress.org contributor username to match the plugin owner account.<\/li>\n<li>Maintenance release for WordPress.org ownership verification and review readiness.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Hardened CSV uploads by routing files through WordPress's standard upload handler, validating file errors, extension, and size, and removing temporary imported files after reading.<\/li>\n<li>Added an explicit CSV upload size limit with a filter for developers.<\/li>\n<li>Updated CSV parsing for PHP 8.4 by explicitly setting the escape argument in str_getcsv().<\/li>\n<li>Reworked code-search SQL extension to use a prepared EXISTS clause instead of building an ID list into the search SQL.<\/li>\n<li>Fixed Elementor\/page-builder shortcode asset loading by registering\/localizing assets when the shortcode actually renders.<\/li>\n<li>Isolated AJAX\/debounce state per search box so multiple EfeOEM search widgets can coexist on the same page.<\/li>\n<li>Rewrite rules now flush only when URL slugs change instead of on every settings save.<\/li>\n<li>Added the required External Services disclosure for the bundled Freemius SDK.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Documentation fix: the efeoem_is_pro() helper now uses can_use_premium_code__premium_only() (checks license validity, not just build type) and is annotated to clarify it must not be relied on for the actual code-stripping mechanism used when Freemius generates the WordPress.org free build.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Restructured the main plugin file per Freemius's official recommendation: all plugin logic now runs inside an else-branch guarded by function_exists('efeoem_fs'), preventing fatal errors if both the free and premium versions are ever active on the same site simultaneously.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Freemius SDK fully integrated with real product credentials (Plugin ID and Public Key). This is the \"master\" (premium) source build used for Freemius Deployment \u2014 the WordPress.org-hosted free version is generated separately by Freemius, not built manually.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Reduced $_POST access in the repeatable field save routine to a single point (was three separate token occurrences on one line, which a single phpcs:ignore comment did not fully cover).<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Fixed a phpcs:ignore comment placement issue \u2014 the suppression comment only covered the first line of a multi-line statement, so the $_POST access on the following line still triggered a nonce-verification warning. Collapsed to a single line to fully resolve it.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fixed the last remaining Plugin Check warning: sanitization now happens directly at the point of accessing $_POST in the repeatable field save routine.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>WordPress.org submission compliance fixes: replaced direct file system calls (fopen\/fread\/fclose) with the WP_Filesystem API in the CSV importer.<\/li>\n<li>Removed the discouraged load_plugin_textdomain() call (translations are loaded automatically for WordPress.org-hosted plugins).<\/li>\n<li>Escaped thumbnail output in the result card template and prefixed its local variables.<\/li>\n<li>Fixed nonce\/unslash handling in the meta box save routine.<\/li>\n<li>Rewrote readme.txt in English per WordPress.org guidelines.<\/li>\n<li>Removed the .distignore file from the distributed package (hidden files are not permitted).<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Updated Plugin URI to the live efendimedya.com domain instead of the not-yet-published magaza.efendimedya.com subdomain.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Prepared for WordPress.org submission: simplified the Plugin Name for a clean slug, updated \"Tested up to\", added a .distignore file.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>The brand icon now actually appears in the admin menu and on the Settings\/Import page headers.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>CSV import now auto-detects the delimiter (comma or semicolon) from the file itself \u2014 a fix for Excel's inconsistent CSV behaviour depending on regional settings.<\/li>\n<li>UTF-8 BOM in CSV files is now stripped correctly (prevents the first column header from being corrupted).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added a bulk CSV import tool (Products \u2192 Import).<\/li>\n<li>Added brand-based filtering to the search box (dropdown, includes child models).<\/li>\n<li>Added a Settings page (Products \u2192 Settings): results per page, URL slugs, native search integration toggle.<\/li>\n<li>Added a Freemius integration skeleton (inactive until SDK files are added).<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Removed the temporary debug mode.<\/li>\n<li>Clearer result card display for products without a title.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added a temporary debug mode.<\/li>\n<li>Critical fix: the is_admin() check treated admin-ajax.php requests as admin requests, so code matching never ran for front-end AJAX searches. Added a wp_doing_ajax() check.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added the brand icon (WordPress.org listing assets).<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Moved the search engine to a more robust mechanism (native meta_query); code matching in AJAX search now works reliably.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Match products by OEM code, your own stock code, competitor cross-reference codes, and superseded numbers, all through one smart search box.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351757"}],"author":[{"embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/efemed"}],"wp:attachment":[{"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351757"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351757"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351757"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351757"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351757"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hau.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}