Özelleştirilmiş bir gezinti deneyimi için dilinizi seçin.

WooCommerce İçin Hızlı Stok Yönetimi

woologgerDoğrulanmış Hesap
|
16.11.2024
|
|
95
WooCommerce İçin Hızlı Stok Yönetimi tr

Sayfa İçeriği

  • ● Kodun Özellikleri:
  • ● Admin Bar'da Stok Yönetimi:
  • ● Hızlı Stok Durumu Güncellemesi:
  • ● Kolay Stok Miktarı Güncellemesi:
  • ● Gerçek Zamanlı Güncellemeler:
  • ● Ürün Listesinde Özel Stok Sütunu:
  • ● Hızlı Stok Durumu Değiştirme:
  • ● Doğrudan Miktar Düzenleme:
  • ● Ekran Görüntüleri:
  • ● 1. Admin Bar'daki Stok Yönetimi Menüsü:
  • ● 2. Stok Yönetimi Modal Penceresi:
  • ● 3. Ürün Listesindeki Özel Stok Sütunu:
  • ● Kod:
  • ● WordPress functions.php Dosyasına Kod Eklemek
  • ● WPCode
  • ● Woologger.com
  • ● functions.php dosyasına kod eklemeyle ilgili detaylı bilgi ve WPCode kullanımı hakkında daha fazla bilgi edinmek için Woologger.com'daki rehbere göz atın.

🚀 WooCommerce, e-ticaret işletmeleri için güçlü bir platform sunar ancak kullanıcı deneyimini optimize etmek için bazı özelleştirmelere ihtiyaç duyar. Stok yönetimi, işletmelerin operasyonel verimliliğinde kritik bir rol oynar. WooCommerce’in esnek yapısı sayesinde, stok kontrolünü daha sezgisel ve kullanıcı dostu hale getirmek mümkündür. 📈

📦 Bu kodu geliştirme amacım, stok yönetimini basitleştirerek, kullanıcıların ürünlerin stok durumunu ve miktarını hızlıca ve doğrudan güncellemelerini sağlamak. Böylelikle, ürün düzenleme sayfalarına gitme ihtiyacı ortadan kalkar ve stok güncellemeleri, ürün listeleme ekranından kolayca yapılabilir. Bu özelleştirme, işletmelerin günlük operasyonlarını daha verimli yönetmelerine yardımcı olur, zaman tasarrufu sağlar ve müşteri memnuniyetini artırır. ✅

🔧 Bu makalede, WooCommerce stok yönetimini iyileştiren bir kod parçasını inceleyeceğiz. Bu kod, ürün listelerinde özel bir stok sütunu ekler, ürün sayfalarında hızlı stok güncellemeleri için kullanıcı dostu modal pencereler sunar ve AJAX ile gerçek zamanlı stok kontrolü ve güncellemeleri gerçekleştirir. Bu geliştirmeler, e-ticaret sitelerinizin kullanıcı deneyimini zenginleştirirken, işletme sahiplerine de günlük iş akışlarında esneklik ve hız sağlar. 💡

Kodun Özellikleri:

  • Admin Bar’da Stok Yönetimi: Ürün sayfasındayken yönetici çubuğuna “Stok Yönetimi” adında yeni bir menü ekler. Bu menüye tıklandığında, stok durumunu ve miktarını güncellemek için kullanılabilen bir modal pencere açılır.
  • Hızlı Stok Durumu Güncellemesi: Modal pencere, ürünün stok durumunu (Stokta, Stokta Yok, Ön Siparişte) seçmek için bir açılır menü içerir. Bu menüden yapılan seçimle birlikte stok durumu anında güncellenir.
  • Kolay Stok Miktarı Güncellemesi: Stok durumu “Stokta” olarak ayarlandığında, stok miktarını güncellemek için bir sayı alanı görüntülenir.
  • Gerçek Zamanlı Güncellemeler: AJAX teknolojisi kullanılarak, tüm stok güncellemeleri sayfayı yenilemeden gerçek zamanlı olarak yapılır.
  • Ürün Listesinde Özel Stok Sütunu: Bu kod, ürün listesinde “Stok Durumu” adında özel bir sütun oluşturur ve her bir ürünün stok durumunu ve miktarını bu sütunda görüntüler. Bu sütun, stok durumuna göre sıralanabilir özelliğe de sahiptir.
  • Hızlı Stok Durumu Değiştirme: Yöneticiler, ürün listesindeki “Stok Durumu” sütunundaki durumu tıklayarak hızlı bir şekilde “Stokta” ve “Stokta Yok” arasında geçiş yapabilirler.
  • Doğrudan Miktar Düzenleme: Yöneticiler, ürün listesindeki miktar değerine tıklayarak doğrudan düzenleme yapabilirler.

Ekran Görüntüleri:

1. Admin Bar’daki Stok Yönetimi Menüsü:

WooCommerce İçin Hızlı Stok Yönetimi Ürün Sayfasından Anında Güncelleme (1)

2. Stok Yönetimi Modal Penceresi:

WooCommerce İçin Hızlı Stok Yönetimi Ürün Sayfasından Anında Güncelleme (3)

3. Ürün Listesindeki Özel Stok Sütunu:

WooCommerce İçin Hızlı Stok Yönetimi Ürün Sayfasından Anında Güncelleme (2)

Kod:

/**
 * WooLogger Stok Yönetimi
 *
 * Bu kod, WooCommerce stok yönetimini geliştirir. Ürün listesine özel bir sütun ekler
 * ve ürün sayfalarında hızlı stok güncellemeleri için bir modal oluşturur.
 * Gerçek zamanlı stok durumu ve miktar güncellemeleri için AJAX işlevselliği sağlar.
 *
 * Oluşturan: woologger.com
 * Sürüm: 1.0
 */

// Admin Bar'a Stok Yönetimi Ekle
add_action('admin_bar_menu', 'woologger_custom_admin_bar_stock_management', 100);
function woologger_custom_admin_bar_stock_management($admin_bar) {
    if (!is_admin() && is_product() && current_user_can('edit_products')) {
        $admin_bar->add_menu(array(
            'id' => 'woologger-stock-management',
            'title' => '<span class="ab-icon dashicons dashicons-chart-area"></span> Stok Yönetimi',
            'href' => '#',
            'meta' => array(
                'onclick' => 'woologgerOpenStockManagement(); return false;',
            ),
        ));
    }
}

// Stok Durumu Güncelleme İşlemi
add_action('wp_ajax_woologger_update_stock_status', 'woologger_handle_update_stock_status');
function woologger_handle_update_stock_status() {
    check_ajax_referer('woologger_update_stock_status', 'security');
    
    $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;
    $new_status = isset($_POST['stock_status']) ? sanitize_text_field($_POST['stock_status']) : '';
    $new_quantity = isset($_POST['stock_quantity']) ? intval($_POST['stock_quantity']) : 0;
    
    $product = wc_get_product($product_id);
    
    if ($product) {
        $product->set_stock_status($new_status);
        if ($product->managing_stock() && $new_status === 'instock') {
            $product->set_stock_quantity($new_quantity);
        } elseif ($product->managing_stock()) {
            $product->set_stock_quantity(0);
        }
        $product->save();
        
        wc_delete_product_transients($product_id);
        
        wp_send_json_success(array('message' => 'Stok durumu başarıyla güncellendi.'));
    } else {
        wp_send_json_error(array('message' => 'Ürün bulunamadı.'));
    }
    
    wp_die();
}

// Stok Yönetimi Modalını Ekle
add_action('wp_footer', 'woologger_add_stock_management_modal');
function woologger_add_stock_management_modal() {
    if (is_product() && current_user_can('edit_products')) {
        global $product;
        ?>
        <div id="woologger-stock-management-modal" class="woologger-modal">
            <div class="woologger-modal-content">
                <span class="woologger-close">×</span>
                <h2>Stok Yönetimi</h2>
                <div id="woologger-stock-management-form">
                    <input type="hidden" id="woologger-product-id" value="<?php echo esc_attr($product->get_id()); ?>">
                    
                    <div class="woologger-form-group">
                        <label for="woologger-stock-status">Stok Durumu:</label>
                        <select id="woologger-stock-status">
                            <option value="instock" <?php selected($product->get_stock_status(), 'instock'); ?>>Stokta</option>
                            <option value="outofstock" <?php selected($product->get_stock_status(), 'outofstock'); ?>>Stokta Yok</option>
                            <option value="onbackorder" <?php selected($product->get_stock_status(), 'onbackorder'); ?>>Ön Siparişte</option>
                        </select>
                    </div>
                    
                    <?php if ($product->managing_stock()): ?>
                    <div class="woologger-form-group" id="woologger-quantity-group" style="display: <?php echo $product->get_stock_status() === 'instock' ? 'block' : 'none'; ?>">
                        <label for="woologger-stock-quantity">Stok Miktarı:</label>
                        <input type="number" id="woologger-stock-quantity" value="<?php echo esc_attr($product->get_stock_quantity()); ?>" min="0">
                    </div>
                    <?php endif; ?>
                    
                    <div class="woologger-button-group">
                        <button id="woologger-update-button" onclick="woologgerUpdateStockStatus()">Güncelle</button>
                        <button id="woologger-cancel-button" onclick="woologgerCloseStockManagement()">İptal</button>
                    </div>
                </div>
                <div id="woologger-update-message"></div>
            </div>
        </div>

        <style>
        .woologger-modal {
            display: none;
            position: fixed;
            z-index: 9999;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto;
            background-color: rgba(0,0,0,0.4);
        }
        .woologger-modal-content {
            background-color: #fefefe;
            margin: 15% auto;
            padding: 30px;
            border: none;
            width: 90%;
            max-width: 500px;
            border-radius: 10px;
            box-shadow: 0 5px 15px rgba(0,0,0,0.3);
        }
        .woologger-close {
            color: #aaa;
            float: right;
            font-size: 28px;
            font-weight: bold;
            cursor: pointer;
            transition: 0.3s;
        }
        .woologger-close:hover,
        .woologger-close:focus {
            color: #000;
        }
        .woologger-modal h2 {
            margin-top: 0;
            color: #333;
            font-size: 24px;
            margin-bottom: 20px;
        }
        .woologger-form-group {
            margin-bottom: 20px;
        }
        .woologger-form-group label {
            display: block;
            margin-bottom: 8px;
            color: #555;
            font-weight: bold;
        }
        .woologger-form-group select,
        .woologger-form-group input[type="number"] {
            width: 100%;
            border: 1px solid #ddd;
            border-radius: 6px;
            box-sizing: border-box;
            font-size: 16px;
            transition: border-color 0.3s;
            height: 45px;
            -webkit-appearance: none;
            -moz-appearance: none;
            appearance: none;
            background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');
            background-repeat: no-repeat;
            background-position: right 12px top 50%;
            background-size: 12px auto;
            padding-right: 30px;
        }
        .woologger-form-group select:focus,
        .woologger-form-group input[type="number"]:focus {
            outline: none;
            border-color: #4CAF50;
        }
        .woologger-button-group {
            text-align: right;
            margin-top: 30px;
        }
        .woologger-button-group button {
            padding: 12px 20px;
            border: none;
            border-radius: 6px;
            cursor: pointer;
            font-weight: bold;
            font-size: 16px;
            transition: background-color 0.3s;
        }
        #woologger-update-button {
            background-color: #4CAF50;
            color: white;
            margin-right: 10px;
        }
        #woologger-update-button:hover {
            background-color: #45a049;
        }
        #woologger-cancel-button {
            background-color: #f44336;
            color: white;
        }
        #woologger-cancel-button:hover {
            background-color: #da190b;
        }
        #woologger-update-message {
            margin-top: 20px;
            padding: 15px;
            border-radius: 6px;
            display: none;
            font-size: 16px;
            text-align: center;
        }
        @media (max-width: 600px) {
            .woologger-modal-content {
                width: 95%;
                padding: 20px;
            }
            .woologger-button-group button {
                width: 100%;
                margin-bottom: 10px;
            }
            #woologger-update-button {
                margin-right: 0;
            }
        }
        </style>

        <script>
        function woologgerOpenStockManagement() {
            document.getElementById('woologger-stock-management-modal').style.display = 'block';
            woologgerToggleQuantityField();
        }

        function woologgerCloseStockManagement() {
            document.getElementById('woologger-stock-management-modal').style.display = 'none';
        }

        function woologgerToggleQuantityField() {
            var stockStatus = document.getElementById('woologger-stock-status').value;
            var quantityGroup = document.getElementById('woologger-quantity-group');
            if (quantityGroup) {
                quantityGroup.style.display = (stockStatus === 'instock') ? 'block' : 'none';
            }
        }

        function woologgerUpdateStockStatus() {
            var productId = document.getElementById('woologger-product-id').value;
            var stockStatus = document.getElementById('woologger-stock-status').value;
            var stockQuantity = document.getElementById('woologger-stock-quantity') ? document.getElementById('woologger-stock-quantity').value : 0;

            jQuery.ajax({
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                type: 'POST',
                data: {
                    action: 'woologger_update_stock_status',
                    security: '<?php echo wp_create_nonce('woologger_update_stock_status'); ?>',
                    product_id: productId,
                    stock_status: stockStatus,
                    stock_quantity: stockQuantity
                },
                success: function(response) {
                    if (response.success) {
                        location.reload();
                    } else {
                        var messageElement = document.getElementById('woologger-update-message');
                        messageElement.innerHTML = response.data.message;
                        messageElement.style.display = 'block';
                        messageElement.style.backgroundColor = '#f2dede';
                        messageElement.style.color = '#a94442';
                    }
                }
            });
        }

        document.getElementById('woologger-stock-status').addEventListener('change', woologgerToggleQuantityField);

        window.onclick = function(event) {
            if (event.target == document.getElementById('woologger-stock-management-modal')) {
                woologgerCloseStockManagement();
            }
        }

        document.querySelector('.woologger-close').onclick = woologgerCloseStockManagement;
        </script>
        <?php
    }
}

// Stok Yönetimi Arayüzü için Özel CSS Stillerini Yükle
add_action('admin_head', 'woologger_add_custom_stock_styles');
function woologger_add_custom_stock_styles(): void {
    $screen = get_current_screen();
    if ($screen?->id !== 'edit-product') return;
    ?>
    <style>
    .wl-stock-info {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: 5px;
        padding: 5px;
        border-radius: 4px;
        background-color: #f9f9f9;
        box-shadow: 0 1px 2px rgba(0,0,0,0.05);
        transition: all 0.3s ease;
    }
    .wl-stock-info:hover { background-color: #f0f0f0; }
    .wl-stock-status, .wl-stock-quantity {
        cursor: pointer;
        padding: 4px 8px;
        border-radius: 4px;
        font-size: 0.9em;
        text-align: center;
        transition: all 0.3s ease;
    }
    .wl-stock-status:hover, .wl-stock-quantity:hover { opacity: 0.8; }
    .wl-stock-status {
        font-weight: bold;
        text-transform: uppercase;
        letter-spacing: 0.5px;
    }
    .wl-stock-status.in-stock {
        background-color: #4CAF50;
        color: white;
    }
    .wl-stock-status.out-of-stock {
        background-color: #F44336;
        color: white;
    }
    .wl-stock-quantity {
        background-color: #e9e9e9;
        color: #333;
    }
    .wl-stock-quantity-input {
        width: 100%;
        text-align: center;
        padding: 4px;
        border: 1px solid #ccc;
        border-radius: 4px;
        font-size: 0.9em;
    }
    .wl-updating {
        opacity: 0.5;
        pointer-events: none;
    }
    @keyframes wl-spin {
        0% { transform: rotate(0deg); }
        100% { transform: rotate(360deg); }
    }
    .wl-updating::after {
        content: '';
        display: inline-block;
        width: 12px;
        height: 12px;
        border: 2px solid #ccc;
        border-top: 2px solid #333;
        border-radius: 50%;
        animation: wl-spin 1s linear infinite;
        margin-left: 10px;
    }
    </style>
    <?php
}

// Ürün Listesine Özel Stok Sütunu Ekle
add_filter('manage_edit-product_columns', 'woologger_custom_product_column', 20);
function woologger_custom_product_column(array $columns): array {
    unset($columns['is_in_stock']);
    $columns['woologger_stock'] = __('Stok Durumu', 'woocommerce');
    return $columns;
}

// Özel Stok Sütununa İçerik Ekle
add_action('manage_product_posts_custom_column', 'woologger_custom_product_list_column_content', 20, 2);
function woologger_custom_product_list_column_content(string $column, int $product_id): void {
    if ($column != 'woologger_stock') return;
    
    $product = wc_get_product($product_id);
    $stock_status = $product->get_stock_status();
    $stock_quantity = $product->get_stock_quantity();
    $manage_stock = $product->get_manage_stock();
    
    $class = $stock_status == 'instock' ? 'in-stock' : 'out-of-stock';
    $text = $stock_status == 'instock' ? __('Stokta', 'woocommerce') : __('Stokta Yok', 'woocommerce');
    
    echo '<div class="wl-stock-info">';
    echo '<span class="wl-stock-status ' . esc_attr($class) . '" data-product-id="' . esc_attr($product_id) . '">' . 
         esc_html($text) . '</span>';

    if ($manage_stock && $stock_quantity !== null) {
        echo '<span class="wl-stock-quantity" data-product-id="' . esc_attr($product_id) . '">' . esc_html($stock_quantity) . ' adet</span>';
    }
    echo '</div>';
}

// Stok Durumu Değiştirme için Ajax İşleyicisi
add_action('wp_ajax_woologger_toggle_stock_status', 'woologger_toggle_stock_status');
function woologger_toggle_stock_status(): void {
    check_ajax_referer('woologger_stock_nonce', 'security');
    if (!current_user_can('edit_products')) {
        wp_send_json_error('İzin reddedildi');
    }

    $product_id = $_POST['product_id'] ?? 0;
    $product = wc_get_product($product_id);

    if (!$product) {
        wp_send_json_error('Ürün bulunamadı');
    }

    $current_status = $product->get_stock_status();
    $new_status = $current_status === 'instock' ? 'outofstock' : 'instock';
    $manage_stock = $product->get_manage_stock();

    if ($manage_stock) {
        if ($new_status == 'outofstock') {
            $product->set_stock_quantity(0);
        } else {
            $previous_quantity = get_post_meta($product_id, '_previous_stock_quantity', true);
            $product->set_stock_quantity($previous_quantity ? (int)$previous_quantity : 1); 
        }
    }

    $product->set_stock_status($new_status);
    $product->save();

    update_post_meta($product_id, '_previous_stock_quantity', $product->get_stock_quantity());

    $updated_product = wc_get_product($product_id);
    if ($updated_product->get_stock_status() !== $new_status) {
        wp_send_json_error('Stok durumu güncellenemedi');
    }

    wp_send_json_success([
        'status' => $new_status,
        'text' => $new_status === 'instock' ? __('Stokta', 'woocommerce') : __('Stokta Yok', 'woocommerce'),
        'quantity' => $manage_stock ? $updated_product->get_stock_quantity() : null
    ]);
}

// Stok Miktarı Güncelleme için Ajax İşleyicisi
add_action('wp_ajax_woologger_update_stock_quantity', 'woologger_update_stock_quantity');
function woologger_update_stock_quantity(): void {
    check_ajax_referer('woologger_stock_nonce', 'security');
    if (!current_user_can('edit_products')) {
        wp_send_json_error('İzin reddedildi');
    }

    $product_id = $_POST['product_id'] ?? 0;
    $new_quantity = $_POST['quantity'] ?? 0;
    
    $product = wc_get_product($product_id);
    if (!$product) {
        wp_send_json_error('Ürün bulunamadı');
    }

    $product->set_stock_quantity((int)$new_quantity);
    $product->set_stock_status($new_quantity > 0 ? 'instock' : 'outofstock');
    $product->save();

    update_post_meta($product_id, '_previous_stock_quantity', $new_quantity);

    $updated_product = wc_get_product($product_id);
    $new_status = $updated_product->get_stock_status();

    wp_send_json_success([
        'status' => $new_status,
        'text' => $new_status === 'instock' ? __('Stokta', 'woocommerce') : __('Stokta Yok', 'woocommerce'),
        'quantity' => $updated_product->get_stock_quantity()
    ]);
}

// Stok Yönetimi Etkileşimleri için JavaScript Ekle
add_action('admin_footer', 'woologger_add_custom_stock_toggle_script');
function woologger_add_custom_stock_toggle_script(): void {
    if (!function_exists('WC')) return;
    
    $screen = get_current_screen();
    if ($screen?->id !== 'edit-product') return;
    ?>
    <script type="text/javascript">
    document.addEventListener('DOMContentLoaded', function() {
        // AJAX istekleri için yardımcı fonksiyon
        function ajaxRequest(url, method, data, callback) {
            var xhr = new XMLHttpRequest();
            xhr.open(method, url, true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        callback(JSON.parse(xhr.responseText));
                    } else {
                        alert('AJAX hatası: ' + xhr.status);
                    }
                }
            };
            xhr.send(encodeURI(Object.keys(data).map(key => key + '=' + data[key]).join('&')));
        }

        // Stok durumunu değiştir
        document.querySelectorAll('.wl-stock-status').forEach(function(statusElement) {
            statusElement.addEventListener('click', function() {
                var stockInfo = this.closest('.wl-stock-info');
                var productId = this.dataset.productId;

                stockInfo.classList.add('wl-updating');

                ajaxRequest(ajaxurl, 'POST', {
                    action: 'woologger_toggle_stock_status',
                    product_id: productId,
                    security: '<?php echo wp_create_nonce('woologger_stock_nonce'); ?>'
                }, function(response) {
                    if (response.success) {
                        statusElement.textContent = response.data.text;
                        statusElement.classList.remove('in-stock', 'out-of-stock');
                        statusElement.classList.add(response.data.status === 'instock' ? 'in-stock' : 'out-of-stock');
                        if (response.data.quantity !== null) {
                            var quantitySpan = stockInfo.querySelector('.wl-stock-quantity');
                            if (quantitySpan) {
                                quantitySpan.textContent = response.data.quantity + ' adet';
                            } else {
                                var newQuantitySpan = document.createElement('span');
                                newQuantitySpan.className = 'wl-stock-quantity';
                                newQuantitySpan.dataset.productId = productId;
                                newQuantitySpan.textContent = response.data.quantity + ' adet';
                                stockInfo.appendChild(newQuantitySpan);
                            }
                        }
                    } else {
                        alert('Hata: ' + response.data);
                    }
                    stockInfo.classList.remove('wl-updating');
                });
            });
        });

        // Stok miktarını güncelle
        document.addEventListener('click', function(event) {
            if (event.target.classList.contains('wl-stock-quantity')) {
                var quantityElement = event.target;
                var productId = quantityElement.dataset.productId;
                var currentQuantity = parseInt(quantityElement.textContent, 10);

                var input = document.createElement('input');
                input.type = 'number';
                input.className = 'wl-stock-quantity-input';
                input.value = currentQuantity;

                quantityElement.style.display = 'none';
                quantityElement.parentNode.insertBefore(input, quantityElement.nextSibling);
                input.focus();

                input.addEventListener('blur', function() {
                    var newQuantity = parseInt(input.value, 10);
                    if (isNaN(newQuantity) || newQuantity < 0) {
                        input.remove();
                        quantityElement.style.display = '';
                        return;
                    }

                    var stockInfo = quantityElement.closest('.wl-stock-info');
                    stockInfo.classList.add('wl-updating');

                    ajaxRequest(ajaxurl, 'POST', {
                        action: 'woologger_update_stock_quantity',
                        product_id: productId,
                        quantity: newQuantity,
                        security: '<?php echo wp_create_nonce('woologger_stock_nonce'); ?>'
                    }, function(response) {
                        if (response.success) {
                            quantityElement.textContent = response.data.quantity + ' adet';
                            var statusSpan = stockInfo.querySelector('.wl-stock-status');
                            statusSpan.textContent = response.data.text;
                            statusSpan.classList.remove('in-stock', 'out-of-stock');
                            statusSpan.classList.add(response.data.status === 'instock' ? 'in-stock' : 'out-of-stock');
                        } else {
                            alert('Hata: ' + response.data);
                        }
                        input.remove();
                        quantityElement.style.display = '';
                        stockInfo.classList.remove('wl-updating');
                    });
                });
            }
        });
    });
    </script>
    <?php
}

// Özel Sütunu Sıralanabilir Yap
add_filter('manage_edit-product_sortable_columns', 'woologger_custom_product_sortable_columns');
function woologger_custom_product_sortable_columns(array $columns): array {
    $columns['woologger_stock'] = 'woologger_stock';
    return $columns;
}

// Özel Sütunun Sıralanmasını İşle
add_action('pre_get_posts', 'woologger_custom_product_orderby');
function woologger_custom_product_orderby($query): void {
    if (!is_admin() || !$query->is_main_query() || $query->get('post_type') !== 'product') return;

    $orderby = $query->get('orderby');
    if ('woologger_stock' == $orderby) {
        $query->set('meta_key', '_stock_status');
        $query->set('orderby', 'meta_value');
    }
}
JavaScript
Kodun Devamını Gör

WordPress functions.php Dosyasına Kod Eklemek

WordPress sitenizin fonksiyonelliğini özelleştirmek için functions.php dosyası oldukça kullanışlı bir araçtır. Ancak, bu dosyaya kod eklerken dikkatli olmak önemlidir; çünkü yanlış yapılan bir işlem sitenizin tamamen çökmesine neden olabilir.

Neyse ki WPCode gibi eklentiler, kod ekleme sürecini çok daha kolay ve güvenli hale getiriyor. WPCode ile, functions.php dosyasına doğrudan müdahale etmenize gerek kalmadan kod snippet’lerini yönetebilirsiniz. Bu da riski en aza indirir ve sitenizin kararlı çalışmasını sağlar.

Woologger.com, functions.php dosyasına nasıl güvenli bir şekilde kod ekleyeceğinizi adım adım anlatan harika bir rehber sunuyor. Bu rehberde, geleneksel yöntemlerle kod eklemenin olası risklerinden nasıl kaçınacağınızı ve WPCode gibi eklentilerin bu süreci nasıl kolaylaştırdığını öğrenebilirsiniz. Ayrıca, değişiklikleri uygulamadan önce sitenizin yedeğini nasıl alacağınız konusunda da bilgi edinebilirsiniz.

functions.php dosyasına kod eklemeyle ilgili detaylı bilgi ve WPCode kullanımı hakkında daha fazla bilgi edinmek için Woologger.com’daki rehbere göz atın.

Yorum yapın

Puanınız:*

Firma Adı
Adınız Soyadınız
Telefon Numaranız
E-posta Adresiniz
Form Tipi Seçiniz
Mesajınız