selam wordpress için bir shortcode yapalım.
-bu kod kullanıcı tarafından yazının altına elle eklenebilir olacak [kontrolbar] şekliher yazının bir bar şeklinde olacak ve bu kar içinde çeşitli araçlar olacak. öncelikle yazının en üstüne yerleşecek ve ilk olarak yazının gösterim sayısını verecek bunu yapalım daha sonra fonksiyonları ekleyelim.
dosya formatıKod:Tümünü seç
wp-content/plugins/kontrolbar/ └── kontrolbar.phpshortcodeKod:Tümünü seç
[kontrolbar]Kod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının en üstüne gösterim sayısını içeren bir bar ekler. * Version: 1.0 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Shortcode fonksiyonu function kb_kontrolbar_shortcode() { if (!is_single()) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; ob_start(); ?> <div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px;"> <strong>Gösterim Sayısı:</strong> <?php echo esc_html($views); ?> </div> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Shortcode'u yazının en üstüne otomatik ekleme function kb_add_kontrolbar_to_content($content) { if (is_single() && in_the_loop() && is_main_query()) { return do_shortcode('[kontrolbar]') . $content; } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content');
wordpress kontrol bar
wordpress kontrol bar
Re: wordpress kontrol bar
Kod:Tümünü seç
<?php
/**
* Plugin Name: Kontrol Bar Shortcode
* Description: Yazının en üstüne gösterim sayısını ve yazı boyutu kontrolü ekler.
* Version: 1.1
* Author: Senin İsmin
*/
// Yazı görüntülenme sayısını artırma fonksiyonu
function kb_increase_post_views($post_id) {
if (!is_single() || empty($post_id)) return;
$views = get_post_meta($post_id, '_post_views', true);
$views = $views ? $views + 1 : 1;
update_post_meta($post_id, '_post_views', $views);
}
add_action('wp_head', function() {
if (is_single()) {
kb_increase_post_views(get_the_ID());
}
});
// Shortcode fonksiyonu
function kb_kontrolbar_shortcode() {
if (!is_single()) return '';
$post_id = get_the_ID();
$views = get_post_meta($post_id, '_post_views', true) ?: 0;
ob_start();
?>
<div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px; display: flex; align-items: center; gap: 10px;">
<span style="font-size: 18px;">👁️</span>
<strong><?php echo esc_html($views); ?></strong>
<button onclick="kbChangeFontSize(1)" style="margin-left: auto; font-size: 16px; padding: 2px 6px;">+A</button>
<button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button>
</div>
<script>
function kbChangeFontSize(change) {
let content = document.querySelector('.entry-content') || document.querySelector('.post-content');
if (content) {
let currentSize = window.getComputedStyle(content).fontSize;
let newSize = parseFloat(currentSize) + change;
content.style.fontSize = newSize + 'px';
}
}
</script>
<?php
return ob_get_clean();
}
add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode');
// Shortcode'u yazının en üstüne otomatik ekleme
function kb_add_kontrolbar_to_content($content) {
if (is_single() && in_the_loop() && is_main_query()) {
return do_shortcode('[kontrolbar]') . $content;
}
return $content;
}
add_filter('the_content', 'kb_add_kontrolbar_to_content');
Re: wordpress kontrol bar
şimdiye kadar iyi gidiyor
Kod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının en üstüne gösterim sayısını ve yazı boyutu kontrolü ekler. * Version: 1.1 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Shortcode fonksiyonu function kb_kontrolbar_shortcode() { if (!is_single()) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; ob_start(); ?> <div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px; display: flex; align-items: center; gap: 10px;"> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <button onclick="kbChangeFontSize(1)" style="margin-left: auto; font-size: 16px; padding: 2px 6px;">+A</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button> </div> <script> function kbChangeFontSize(change) { let content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { let currentSize = window.getComputedStyle(content).fontSize; let newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Shortcode'u yazının en üstüne otomatik ekleme function kb_add_kontrolbar_to_content($content) { if (is_single() && in_the_loop() && is_main_query()) { return do_shortcode('[kontrolbar]') . $content; } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content');
Re: wordpress kontrol bar
devamKod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının en üstüne ve altına gösterim sayısını, yazı boyutu kontrolünü ve önceki/sonraki yazı bağlantılarını ekler. Başka sayfalarda sadece shortcode eklenmişse görünür. * Version: 1.5 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Shortcode fonksiyonu function kb_kontrolbar_shortcode() { if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; $prev_post = get_previous_post(); $next_post = get_next_post(); ob_start(); ?> <div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px; display: flex; align-items: center; gap: 10px;"> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <?php if ($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #888;">⬅️</a> <?php endif; ?> <?php if ($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #888;">➡️</a> <?php endif; ?> <button onclick="kbChangeFontSize(1)" style="margin-left: auto; font-size: 16px; padding: 2px 6px;">A+</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">A-</button> </div> <script> function kbChangeFontSize(change) { let content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { let currentSize = window.getComputedStyle(content).fontSize; let newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Shortcode'u yazının hem üstüne hem altına ekleme function kb_add_kontrolbar_to_content($content) { if (is_single()) { return kb_kontrolbar_shortcode() . $content . kb_kontrolbar_shortcode(); } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content');
Re: wordpress kontrol bar
devamKod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının en üstüne ve altına gösterim sayısını, yazı boyutu kontrolünü, önceki/sonraki yazı bağlantılarını ve okunmamış en son haberlerden seçilen ticker'ı ekler. Başka sayfalarda sadece shortcode eklenmişse görünür. * Version: 1.8 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Kullanıcının okuduğu yazıları cookie ile takip et function kb_track_read_posts() { if (is_single()) { $post_id = get_the_ID(); $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if (!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; setcookie('kb_read_posts', json_encode($read_posts), time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); $_COOKIE['kb_read_posts'] = json_encode($read_posts); } } } add_action('wp', 'kb_track_read_posts'); // Shortcode fonksiyonu function kb_kontrolbar_shortcode() { // Sadece tekil yazılarda veya içerikte shortcode varsa çalışsın if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; $prev_post = get_previous_post(); $next_post = get_next_post(); // Okunmamış yazıları almak için cookie'deki ID'leri kullan $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } // Şu an okunan yazıyı da hariç tut if(!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; } $ticker_args = array( 'posts_per_page' => 5, 'post_status' => 'publish', 'post__not_in' => $read_posts, 'orderby' => 'date', 'order' => 'DESC' ); $ticker_query = new WP_Query($ticker_args); ob_start(); ?> <div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px; display: flex; align-items: center; gap: 10px;"> <!-- Görüntülenme sayısı --> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <!-- Önceki ve sonraki yazı okları, padding azaltıldı --> <?php if ($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;"><</a> <?php endif; ?> <?php if ($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;">></a> <?php endif; ?> <!-- Haber ticker alanı (bar yüksekliğini artırmayacak şekilde, sabit 24px yükseklik) --> <div class="kb-news-ticker" style="flex: 1; height: 24px; overflow: hidden; position: relative;"> <?php if ($ticker_query->have_posts()): ?> <?php while($ticker_query->have_posts()): $ticker_query->the_post(); ?> <a class="kb-news-item" href="<?php the_permalink(); ?>" style="position: absolute; top: 0; left: 0; right: 0; display: none; align-items: center; text-decoration: none; color: #000; padding: 0 5px; height: 100%;"> <?php if (has_post_thumbnail()): ?> <img src="<?php echo get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'); ?>" style="height: 24px; width: auto; margin-right: 5px; vertical-align: middle;"> <?php endif; ?> <span><?php echo wp_trim_words(get_the_title(), 5, '...'); ?></span> </a> <?php endwhile; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> </div> <!-- Yazı boyutu kontrolü --> <button onclick="kbChangeFontSize(1)" style="font-size: 16px; padding: 2px 6px;">+A</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button> </div> <script> // Yazı boyutu değiştirme fonksiyonu function kbChangeFontSize(change) { let content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { let currentSize = window.getComputedStyle(content).fontSize; let newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } // Haber ticker'ı için otomatik geçiş, mouseover'da duraklatma document.addEventListener('DOMContentLoaded', function() { let ticker = document.querySelector('.kb-news-ticker'); if (ticker) { let items = ticker.querySelectorAll('.kb-news-item'); if (items.length > 0) { let currentIndex = 0; items[currentIndex].style.display = 'flex'; let cycleInterval = function() { return setInterval(function() { items[currentIndex].style.display = 'none'; currentIndex = (currentIndex + 1) % items.length; items[currentIndex].style.display = 'flex'; }, 3000); }; let intervalId = cycleInterval(); ticker.addEventListener('mouseover', function() { clearInterval(intervalId); }); ticker.addEventListener('mouseout', function() { intervalId = cycleInterval(); }); } } }); </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Sadece shortcode içeren yazılarda kontrol barı gösterilsin function kb_add_kontrolbar_to_content($content) { if (is_single() && has_shortcode($content, 'kontrolbar')) { return kb_kontrolbar_shortcode() . $content . kb_kontrolbar_shortcode(); } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content'); ?>
Re: wordpress kontrol bar
devam
Kod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının en üstüne ve altına gösterim sayısını, yazı boyutu kontrolünü, önceki/sonraki yazı bağlantılarını ve okunmamış son haber ticker'ını ekler. Kontrol barı yalnızca [kontrolbar] shortcode'u eklenmiş yazılarda görünür. * Version: 1.9 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Kullanıcının okuduğu yazıları cookie ile takip et function kb_track_read_posts() { if (is_single()) { $post_id = get_the_ID(); $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if (!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; setcookie('kb_read_posts', json_encode($read_posts), time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); $_COOKIE['kb_read_posts'] = json_encode($read_posts); } } } add_action('wp', 'kb_track_read_posts'); // Shortcode fonksiyonu function kb_kontrolbar_shortcode() { // Sadece tekil yazılarda veya içerikte shortcode varsa çalışsın if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; $prev_post = get_previous_post(); $next_post = get_next_post(); // Ticker: okunmamış yazıları almak için cookie'deki ID'leri kullan $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } // Şu an okunan yazıyı da hariç tut if(!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; } $ticker_args = array( 'posts_per_page' => 5, 'post_status' => 'publish', 'post__not_in' => $read_posts, 'orderby' => 'date', 'order' => 'DESC' ); $ticker_query = new WP_Query($ticker_args); ob_start(); ?> <style> /* Ticker item stil ve geçişleri */ .kb-news-ticker { position: relative; height: 24px; overflow: hidden; } .kb-news-item { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; padding: 0 5px; height: 100%; opacity: 0; transition: opacity 0.5s; } .kb-news-item.active { opacity: 1; } .kb-news-content { display: flex; align-items: center; } .kb-news-nav span { cursor: pointer; color: #aaa; font-size: 16px; margin-left: 5px; } </style> <div class="kb-kontrolbar" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; margin-bottom: 20px; display: flex; align-items: center;"> <!-- Dıştaki Yazı Navigasyonu: Sol (önceki yazı) --> <div class="kb-post-nav-left" style="margin-right: 10px;"> <?php if ($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;"><</a> <?php endif; ?> </div> <!-- Ortadaki kısım --> <div class="kb-control-middle" style="flex: 1; display: flex; align-items: center; gap: 10px;"> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <!-- Haber Ticker Alanı --> <div class="kb-news-ticker" style="flex: 1;"> <?php if ($ticker_query->have_posts()): ?> <?php while($ticker_query->have_posts()): $ticker_query->the_post(); ?> <a class="kb-news-item" href="<?php the_permalink(); ?>"> <div class="kb-news-content"> <?php if (has_post_thumbnail()): ?> <img src="<?php echo get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'); ?>" style="height: 24px; width: auto; margin-right: 5px; vertical-align: middle;"> <?php endif; ?> <span class="kb-news-title"><?php echo wp_trim_words(get_the_title(), 5, '...'); ?></span> </div> <!-- Ticker içi navigasyon (manüel) --> <div class="kb-news-nav"> <span class="kb-ticker-prev"><</span> <span class="kb-ticker-next">></span> </div> </a> <?php endwhile; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> </div> <!-- Yazı Boyutu Kontrolleri --> <button onclick="kbChangeFontSize(1)" style="font-size: 16px; padding: 2px 6px;">+A</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button> </div> <!-- Dıştaki Yazı Navigasyonu: Sağ (sonraki yazı) --> <div class="kb-post-nav-right" style="margin-left: 10px;"> <?php if ($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;">></a> <?php endif; ?> </div> </div> <script> // Yazı boyutu değiştirme fonksiyonu function kbChangeFontSize(change) { var content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { var currentSize = window.getComputedStyle(content).fontSize; var newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } // Ticker yönetimi document.addEventListener('DOMContentLoaded', function() { var ticker = document.querySelector('.kb-news-ticker'); if (ticker) { var items = ticker.querySelectorAll('.kb-news-item'); if (items.length > 0) { var currentIndex = 0; items.forEach(function(item) { item.classList.remove('active'); }); items[currentIndex].classList.add('active'); var intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); // Ticker gösterim fonksiyonu window.kbTickerShow = function(index) { items[currentIndex].classList.remove('active'); currentIndex = index; items[currentIndex].classList.add('active'); } window.kbTickerNext = function() { kbTickerShow((currentIndex + 1) % items.length); resetInterval(); } window.kbTickerPrev = function() { kbTickerShow((currentIndex - 1 + items.length) % items.length); resetInterval(); } function resetInterval() { clearInterval(intervalId); intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); } // Manuel ticker navigasyonu için olay dinleyicileri items.forEach(function(item) { var prevBtn = item.querySelector('.kb-ticker-prev'); var nextBtn = item.querySelector('.kb-ticker-next'); if (prevBtn) { prevBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerPrev(); }); } if (nextBtn) { nextBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerNext(); }); } }); // Ticker üzerinde mouse ile duraklatma ticker.addEventListener('mouseover', function() { clearInterval(intervalId); }); ticker.addEventListener('mouseout', function() { resetInterval(); }); } } }); </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Kontrol barı, yazının hem üstünde hem altında ekle (sadece shortcode eklenmiş içeriklerde) function kb_add_kontrolbar_to_content($content) { if (is_single() && has_shortcode($content, 'kontrolbar')) { return kb_kontrolbar_shortcode() . $content . kb_kontrolbar_shortcode(); } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content'); ?>
Re: wordpress kontrol bar
devamKod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının üst kısmına gösterim sayısını, yazı boyutu kontrolünü, önceki/sonraki yazı navigasyonunu ve okunmamış haber ticker'ını ekler. Sayfa aşağı kaydırıldığında bar yapışkan olarak kalır. * Version: 2.2 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Kullanıcının okuduğu yazıları cookie ile takip etme function kb_track_read_posts() { if (is_single()) { $post_id = get_the_ID(); $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if (!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; setcookie('kb_read_posts', json_encode($read_posts), time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); $_COOKIE['kb_read_posts'] = json_encode($read_posts); } } } add_action('wp', 'kb_track_read_posts'); // Shortcode fonksiyonu: Kontrol barı oluşturur function kb_kontrolbar_shortcode() { // Yalnızca tekil yazılarda veya içerikte [kontrolbar] varsa çalışsın if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; $prev_post = get_previous_post(); $next_post = get_next_post(); // Ticker: Okunmamış yazılar (cookie'deki okunanları hariç tutar) $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if(!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; } $ticker_args = array( 'posts_per_page' => 5, 'post_status' => 'publish', 'post__not_in' => $read_posts, 'orderby' => 'date', 'order' => 'DESC' ); $ticker_query = new WP_Query($ticker_args); ob_start(); ?> <style> /* Yapışkan kontrol barı: admin barı göz önüne alarak top offset ayarlanıyor */ .kb-kontrolbar.sticky { position: sticky; top: <?php echo ( is_admin_bar_showing() ? '32px' : '0' ); ?>; z-index: 1000; } /* Haber ticker stili */ .kb-news-ticker { position: relative; height: 24px; overflow: hidden; } .kb-news-item { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; padding: 0 5px; height: 100%; opacity: 0; transition: opacity 0.5s; pointer-events: none; } .kb-news-item.active { opacity: 1; pointer-events: auto; } .kb-news-content { display: flex; align-items: center; } .kb-news-nav span { cursor: pointer; color: #aaa; font-size: 16px; margin-left: 5px; } </style> <div class="kb-kontrolbar sticky" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; display: flex; align-items: center;"> <!-- Dıştaki Yazı Navigasyonu: Önceki Yazı --> <div class="kb-post-nav-left" style="margin-right: 10px;"> <?php if ($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;"><</a> <?php endif; ?> </div> <!-- Ortadaki Alan --> <div class="kb-control-middle" style="flex: 1; display: flex; align-items: center; gap: 10px;"> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <!-- Haber Ticker Alanı --> <div class="kb-news-ticker" style="flex: 1;"> <?php if ($ticker_query->have_posts()): ?> <?php while($ticker_query->have_posts()): $ticker_query->the_post(); ?> <a class="kb-news-item" href="<?php the_permalink(); ?>"> <div class="kb-news-content"> <?php if (has_post_thumbnail()): ?> <img src="<?php echo get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'); ?>" style="height: 24px; width: auto; margin-right: 5px; vertical-align: middle;"> <?php endif; ?> <span class="kb-news-title"><?php echo wp_trim_words(get_the_title(), 5, '...'); ?></span> </div> <!-- Ticker içi navigasyon: Haber geçiş okları --> <div class="kb-news-nav"> <span class="kb-ticker-prev"><</span> <span class="kb-ticker-next">></span> </div> </a> <?php endwhile; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> </div> <!-- Yazı Boyutu Kontrolleri --> <button onclick="kbChangeFontSize(1)" style="font-size: 16px; padding: 2px 6px;">+A</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button> </div> <!-- Dıştaki Yazı Navigasyonu: Sonraki Yazı --> <div class="kb-post-nav-right" style="margin-left: 10px;"> <?php if ($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;">></a> <?php endif; ?> </div> </div> <script> // Yazı boyutu değiştirme fonksiyonu function kbChangeFontSize(change) { var content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { var currentSize = window.getComputedStyle(content).fontSize; var newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } // Haber ticker yönetimi document.addEventListener('DOMContentLoaded', function() { var ticker = document.querySelector('.kb-news-ticker'); if (ticker) { var items = ticker.querySelectorAll('.kb-news-item'); if (items.length > 0) { var currentIndex = 0; items.forEach(function(item) { item.classList.remove('active'); }); items[currentIndex].classList.add('active'); var intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); window.kbTickerShow = function(index) { items[currentIndex].classList.remove('active'); currentIndex = index; items[currentIndex].classList.add('active'); } window.kbTickerNext = function() { kbTickerShow((currentIndex + 1) % items.length); resetInterval(); } window.kbTickerPrev = function() { kbTickerShow((currentIndex - 1 + items.length) % items.length); resetInterval(); } function resetInterval() { clearInterval(intervalId); intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); } // Manuel ticker navigasyonu items.forEach(function(item) { var prevBtn = item.querySelector('.kb-ticker-prev'); var nextBtn = item.querySelector('.kb-ticker-next'); if (prevBtn) { prevBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerPrev(); }); } if (nextBtn) { nextBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerNext(); }); } }); ticker.addEventListener('mouseover', function() { clearInterval(intervalId); }); ticker.addEventListener('mouseout', function() { resetInterval(); }); } } }); </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Kontrol barı yalnızca yazının üst kısmına ekle function kb_add_kontrolbar_to_content($content) { if (is_single() && has_shortcode($content, 'kontrolbar')) { return kb_kontrolbar_shortcode() . $content; } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content'); ?>
Re: wordpress kontrol bar
devamKod:Tümünü seç
<?php /** * Plugin Name: Kontrol Bar Shortcode * Description: Yazının üst kısmına gösterim sayısını, yazı boyutu kontrolünü, önceki/sonraki yazı navigasyonunu ve okunmamış haber ticker'ını ekler. Sayfa aşağı kaydırıldığında bar yapışkan olarak kalır. * Version: 2.2 * Author: Senin İsmin */ // Yazı görüntülenme sayısını artırma fonksiyonu function kb_increase_post_views($post_id) { if (!is_single() || empty($post_id)) return; $views = get_post_meta($post_id, '_post_views', true); $views = $views ? $views + 1 : 1; update_post_meta($post_id, '_post_views', $views); } add_action('wp_head', function() { if (is_single()) { kb_increase_post_views(get_the_ID()); } }); // Kullanıcının okuduğu yazıları cookie ile takip etme function kb_track_read_posts() { if (is_single()) { $post_id = get_the_ID(); $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if (!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; setcookie('kb_read_posts', json_encode($read_posts), time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); $_COOKIE['kb_read_posts'] = json_encode($read_posts); } } } add_action('wp', 'kb_track_read_posts'); // Shortcode fonksiyonu: Kontrol barı oluşturur function kb_kontrolbar_shortcode() { // Yalnızca tekil yazılarda veya içerikte [kontrolbar] varsa çalışsın if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return ''; $post_id = get_the_ID(); $views = get_post_meta($post_id, '_post_views', true) ?: 0; $prev_post = get_previous_post(); $next_post = get_next_post(); // Ticker: Okunmamış yazılar (cookie'deki okunanları hariç tutar) $read_posts = array(); if(isset($_COOKIE['kb_read_posts'])) { $read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true); if(!is_array($read_posts)) { $read_posts = array(); } } if(!in_array($post_id, $read_posts)) { $read_posts[] = $post_id; } $ticker_args = array( 'posts_per_page' => 5, 'post_status' => 'publish', 'post__not_in' => $read_posts, 'orderby' => 'date', 'order' => 'DESC' ); $ticker_query = new WP_Query($ticker_args); ob_start(); ?> <style> /* Yapışkan kontrol barı: admin barı göz önüne alarak top offset ayarlanıyor */ .kb-kontrolbar.sticky { position: sticky; top: <?php echo ( is_admin_bar_showing() ? '32px' : '0' ); ?>; z-index: 1000; } /* Haber ticker stili */ .kb-news-ticker { position: relative; height: 24px; overflow: hidden; } .kb-news-item { position: absolute; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; padding: 0 5px; height: 100%; opacity: 0; transition: opacity 0.5s; pointer-events: none; } .kb-news-item.active { opacity: 1; pointer-events: auto; } .kb-news-content { display: flex; align-items: center; } .kb-news-nav span { cursor: pointer; color: #aaa; font-size: 16px; margin-left: 5px; } </style> <div class="kb-kontrolbar sticky" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; display: flex; align-items: center;"> <!-- Dıştaki Yazı Navigasyonu: Önceki Yazı --> <div class="kb-post-nav-left" style="margin-right: 10px;"> <?php if ($prev_post): ?> <a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;"><</a> <?php endif; ?> </div> <!-- Ortadaki Alan --> <div class="kb-control-middle" style="flex: 1; display: flex; align-items: center; gap: 10px;"> <span style="font-size: 18px;">👁️</span> <strong><?php echo esc_html($views); ?></strong> <!-- Haber Ticker Alanı --> <div class="kb-news-ticker" style="flex: 1;"> <?php if ($ticker_query->have_posts()): ?> <?php while($ticker_query->have_posts()): $ticker_query->the_post(); ?> <a class="kb-news-item" href="<?php the_permalink(); ?>"> <div class="kb-news-content"> <?php if (has_post_thumbnail()): ?> <img src="<?php echo get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'); ?>" style="height: 24px; width: auto; margin-right: 5px; vertical-align: middle;"> <?php endif; ?> <span class="kb-news-title"><?php echo wp_trim_words(get_the_title(), 5, '...'); ?></span> </div> <!-- Ticker içi navigasyon: Haber geçiş okları --> <div class="kb-news-nav"> <span class="kb-ticker-prev"><</span> <span class="kb-ticker-next">></span> </div> </a> <?php endwhile; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> </div> <!-- Yazı Boyutu Kontrolleri --> <button onclick="kbChangeFontSize(1)" style="font-size: 16px; padding: 2px 6px;">+A</button> <button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button> </div> <!-- Dıştaki Yazı Navigasyonu: Sonraki Yazı --> <div class="kb-post-nav-right" style="margin-left: 10px;"> <?php if ($next_post): ?> <a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;">></a> <?php endif; ?> </div> </div> <script> // Yazı boyutu değiştirme fonksiyonu function kbChangeFontSize(change) { var content = document.querySelector('.entry-content') || document.querySelector('.post-content'); if (content) { var currentSize = window.getComputedStyle(content).fontSize; var newSize = parseFloat(currentSize) + change; content.style.fontSize = newSize + 'px'; } } // Haber ticker yönetimi document.addEventListener('DOMContentLoaded', function() { var ticker = document.querySelector('.kb-news-ticker'); if (ticker) { var items = ticker.querySelectorAll('.kb-news-item'); if (items.length > 0) { var currentIndex = 0; items.forEach(function(item) { item.classList.remove('active'); }); items[currentIndex].classList.add('active'); var intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); window.kbTickerShow = function(index) { items[currentIndex].classList.remove('active'); currentIndex = index; items[currentIndex].classList.add('active'); } window.kbTickerNext = function() { kbTickerShow((currentIndex + 1) % items.length); resetInterval(); } window.kbTickerPrev = function() { kbTickerShow((currentIndex - 1 + items.length) % items.length); resetInterval(); } function resetInterval() { clearInterval(intervalId); intervalId = setInterval(function() { items[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % items.length; items[currentIndex].classList.add('active'); }, 4000); } // Manuel ticker navigasyonu items.forEach(function(item) { var prevBtn = item.querySelector('.kb-ticker-prev'); var nextBtn = item.querySelector('.kb-ticker-next'); if (prevBtn) { prevBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerPrev(); }); } if (nextBtn) { nextBtn.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); kbTickerNext(); }); } }); ticker.addEventListener('mouseover', function() { clearInterval(intervalId); }); ticker.addEventListener('mouseout', function() { resetInterval(); }); } } }); </script> <?php return ob_get_clean(); } add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode'); // Kontrol barı yalnızca yazının üst kısmına ekle function kb_add_kontrolbar_to_content($content) { if (is_single() && has_shortcode($content, 'kontrolbar')) { return kb_kontrolbar_shortcode() . $content; } return $content; } add_filter('the_content', 'kb_add_kontrolbar_to_content'); ?>
Re: wordpress kontrol bar
Kod:Tümünü seç
<?php
/**
* Plugin Name: Kontrol Bar Shortcode
* Description: Yazının üst kısmına gösterim sayısını, yazı boyutu kontrolünü, önceki/sonraki yazı navigasyonunu ve okunmamış haber ticker'ını ekler. Sayfa aşağı kaydırıldığında bar yapışkan olarak kalır.
* Version: 2.2
* Author: Senin İsmin
*/
// Yazı görüntülenme sayısını artırma fonksiyonu
function kb_increase_post_views($post_id) {
if (!is_single() || empty($post_id)) return;
$views = get_post_meta($post_id, '_post_views', true);
$views = $views ? $views + 1 : 1;
update_post_meta($post_id, '_post_views', $views);
}
add_action('wp_head', function() {
if (is_single()) {
kb_increase_post_views(get_the_ID());
}
});
// Kullanıcının okuduğu yazıları cookie ile takip etme
function kb_track_read_posts() {
if (is_single()) {
$post_id = get_the_ID();
$read_posts = array();
if(isset($_COOKIE['kb_read_posts'])) {
$read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true);
if(!is_array($read_posts)) {
$read_posts = array();
}
}
if (!in_array($post_id, $read_posts)) {
$read_posts[] = $post_id;
setcookie('kb_read_posts', json_encode($read_posts), time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
$_COOKIE['kb_read_posts'] = json_encode($read_posts);
}
}
}
add_action('wp', 'kb_track_read_posts');
// Shortcode fonksiyonu: Kontrol barı oluşturur
function kb_kontrolbar_shortcode() {
// Yalnızca tekil yazılarda veya içerikte [kontrolbar] varsa çalışsın
if (!is_single() && !has_shortcode(get_the_content(), 'kontrolbar')) return '';
$post_id = get_the_ID();
$views = get_post_meta($post_id, '_post_views', true) ?: 0;
$prev_post = get_previous_post();
$next_post = get_next_post();
// Ticker: Okunmamış yazılar (cookie'deki okunanları hariç tutar)
$read_posts = array();
if(isset($_COOKIE['kb_read_posts'])) {
$read_posts = json_decode(stripslashes($_COOKIE['kb_read_posts']), true);
if(!is_array($read_posts)) {
$read_posts = array();
}
}
if(!in_array($post_id, $read_posts)) {
$read_posts[] = $post_id;
}
$ticker_args = array(
'posts_per_page' => 5,
'post_status' => 'publish',
'post__not_in' => $read_posts,
'orderby' => 'date',
'order' => 'DESC'
);
$ticker_query = new WP_Query($ticker_args);
ob_start();
?>
<style>
/* Yapışkan kontrol barı: admin barı göz önüne alarak top offset ayarlanıyor */
.kb-kontrolbar.sticky {
position: sticky;
top: <?php echo ( is_admin_bar_showing() ? '32px' : '0' ); ?>;
z-index: 1000;
}
/* Haber ticker stili */
.kb-news-ticker {
position: relative;
height: 24px;
overflow: hidden;
}
.kb-news-item {
position: absolute;
top: 0;
left: 0;
right: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 5px;
height: 100%;
opacity: 0;
transition: opacity 0.5s;
pointer-events: none;
}
.kb-news-item.active {
opacity: 1;
pointer-events: auto;
}
.kb-news-content {
display: flex;
align-items: center;
}
.kb-news-nav span {
cursor: pointer;
color: #aaa;
font-size: 16px;
margin-left: 5px;
}
</style>
<div class="kb-kontrolbar sticky" style="background: #f8f9fa; padding: 10px; border: 1px solid #ddd; display: flex; align-items: center;">
<!-- Dıştaki Yazı Navigasyonu: Önceki Yazı -->
<div class="kb-post-nav-left" style="margin-right: 10px;">
<?php if ($prev_post): ?>
<a href="<?php echo get_permalink($prev_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;"><</a>
<?php endif; ?>
</div>
<!-- Ortadaki Alan -->
<div class="kb-control-middle" style="flex: 1; display: flex; align-items: center; gap: 10px;">
<span style="font-size: 18px;">👁️</span>
<strong><?php echo esc_html($views); ?></strong>
<!-- Haber Ticker Alanı -->
<div class="kb-news-ticker" style="flex: 1;">
<?php if ($ticker_query->have_posts()): ?>
<?php while($ticker_query->have_posts()): $ticker_query->the_post(); ?>
<a class="kb-news-item" href="<?php the_permalink(); ?>">
<div class="kb-news-content">
<?php if (has_post_thumbnail()): ?>
<img src="<?php echo get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'); ?>" style="height: 24px; width: auto; margin-right: 5px; vertical-align: middle;">
<?php endif; ?>
<span class="kb-news-title"><?php echo wp_trim_words(get_the_title(), 5, '...'); ?></span>
</div>
<!-- Ticker içi navigasyon: Haber geçiş okları -->
<div class="kb-news-nav">
<span class="kb-ticker-prev"><</span>
<span class="kb-ticker-next">></span>
</div>
</a>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
<!-- Yazı Boyutu Kontrolleri -->
<button onclick="kbChangeFontSize(1)" style="font-size: 16px; padding: 2px 6px;">+A</button>
<button onclick="kbChangeFontSize(-1)" style="font-size: 16px; padding: 2px 6px;">-A</button>
</div>
<!-- Dıştaki Yazı Navigasyonu: Sonraki Yazı -->
<div class="kb-post-nav-right" style="margin-left: 10px;">
<?php if ($next_post): ?>
<a href="<?php echo get_permalink($next_post->ID); ?>" style="text-decoration: none; font-size: 18px; color: #aaa; padding: 2px 4px; background: #eee; border-radius: 3px;">></a>
<?php endif; ?>
</div>
</div>
<script>
// Yazı boyutu değiştirme fonksiyonu
function kbChangeFontSize(change) {
var content = document.querySelector('.entry-content') || document.querySelector('.post-content');
if (content) {
var currentSize = window.getComputedStyle(content).fontSize;
var newSize = parseFloat(currentSize) + change;
content.style.fontSize = newSize + 'px';
}
}
// Haber ticker yönetimi
document.addEventListener('DOMContentLoaded', function() {
var ticker = document.querySelector('.kb-news-ticker');
if (ticker) {
var items = ticker.querySelectorAll('.kb-news-item');
if (items.length > 0) {
var currentIndex = 0;
items.forEach(function(item) {
item.classList.remove('active');
});
items[currentIndex].classList.add('active');
var intervalId = setInterval(function() {
items[currentIndex].classList.remove('active');
currentIndex = (currentIndex + 1) % items.length;
items[currentIndex].classList.add('active');
}, 4000);
window.kbTickerShow = function(index) {
items[currentIndex].classList.remove('active');
currentIndex = index;
items[currentIndex].classList.add('active');
}
window.kbTickerNext = function() {
kbTickerShow((currentIndex + 1) % items.length);
resetInterval();
}
window.kbTickerPrev = function() {
kbTickerShow((currentIndex - 1 + items.length) % items.length);
resetInterval();
}
function resetInterval() {
clearInterval(intervalId);
intervalId = setInterval(function() {
items[currentIndex].classList.remove('active');
currentIndex = (currentIndex + 1) % items.length;
items[currentIndex].classList.add('active');
}, 4000);
}
// Manuel ticker navigasyonu
items.forEach(function(item) {
var prevBtn = item.querySelector('.kb-ticker-prev');
var nextBtn = item.querySelector('.kb-ticker-next');
if (prevBtn) {
prevBtn.addEventListener('click', function(e) {
e.stopPropagation();
e.preventDefault();
kbTickerPrev();
});
}
if (nextBtn) {
nextBtn.addEventListener('click', function(e) {
e.stopPropagation();
e.preventDefault();
kbTickerNext();
});
}
});
ticker.addEventListener('mouseover', function() {
clearInterval(intervalId);
});
ticker.addEventListener('mouseout', function() {
resetInterval();
});
}
}
});
</script>
<?php
return ob_get_clean();
}
add_shortcode('kontrolbar', 'kb_kontrolbar_shortcode');
// Kontrol barı yalnızca yazının üst kısmına ekle
function kb_add_kontrolbar_to_content($content) {
if (is_single() && has_shortcode($content, 'kontrolbar')) {
return kb_kontrolbar_shortcode() . $content;
}
return $content;
}
add_filter('the_content', 'kb_add_kontrolbar_to_content');
?>