Wordpress Snippets By NamHy
README: Mô Tả Các Tính Năng
1. ndev ajax
Mô tả:
Xử lý các yêu cầu AJAX để thêm sản phẩm vào giỏ hàng và trả về số lượng sản phẩm hiện tại trong giỏ. Đoạn mã này sử dụng AJAX của WordPress để gửi và nhận dữ liệu từ server.
Mã nguồn:
<?php
add_action('wp_ajax_add_Cart', 'add_Cart');
add_action('wp_ajax_nopriv_add_Cart', 'add_Cart');
function add_Cart() {
$arr = array('count' => WC()->cart->cart_contents_count);
echo json_encode($arr);
die();
}
?>
2. ndev breadcrumb
Mô tả:
Hiển thị đường dẫn điều hướng (breadcrumb) trên trang, sử dụng plugin Yoast SEO. Đây là một công cụ hữu ích cho người dùng để biết họ đang ở đâu trong cấu trúc của website.
Mã nguồn:
<?php if ( function_exists('yoast_breadcrumb') ) {yoast_breadcrumb('<p id="breadcrumbs"><i class="fa fa-home"></i> ','</p>');} ?>
3. ndev category
Mô tả:
Liệt kê các danh mục sản phẩm chính (taxonomy) từ hệ thống, bỏ qua danh mục với ID là 16. Cung cấp liên kết tới mỗi danh mục sản phẩm.
Mã nguồn:
<?php
$args = array(
'hide_empty' => 0,
'taxonomy' => 'danh-muc',
'exclude' => array( 16 ),
'orderby' => 'id',
'parent' => 0
);
$cates = get_categories( $args );
foreach ( $cates as $cate ) {
echo '<a href="'.get_term_link($cate->slug, 'danh-muc').'">';
echo $cate->name;
echo '</a>';
}
?>
4. ndev img
Mô tả:
Hiển thị hình ảnh thumbnail của bài viết với kích thước cố định (360x230px), giúp tối ưu hóa giao diện của website khi hiển thị sản phẩm hoặc bài viết.
Mã nguồn:
<img src='<?php echo ndev_get_thumb(get_the_id(), 360, 230); ?>' alt='<?php the_title(); ?>'>
5. ndev js ajax
Mô tả:
Đoạn mã JavaScript sử dụng AJAX để xử lý biểu mẫu liên hệ. Khi người dùng gửi biểu mẫu, dữ liệu sẽ được gửi đến server và trả về kết quả. Nó giúp hiển thị thông báo thành công hoặc thất bại ngay lập tức mà không cần tải lại trang.
Mã nguồn:
$("#contact-form").submit(function () {
event.preventDefault();
$(".ajax-return").html("");
var data = {};
$.each($(this).serializeArray(), function () {
data[this.name] = this.value;
});
$.ajax({
type: "POST",
url: Home + "/wp-admin/admin-ajax.php",
data: {
action: "Contact_action",
data: data,
},
beforeSend: function () {
$(".load-ajax").show();
},
success: function (data) {
$("#contact-form")[0].reset();
$(".load-ajax").hide();
var rs = JSON.parse(data);
if (rs.status == 1) {
$(".ajax-return").html('<p class="blue">' + rs.data + "</p>");
} else {
$(".ajax-return").html('<p class="red">' + rs.data + "</p>");
}
},
});
});
Mô tả:
Hiển thị menu điều hướng chính trong website, sử dụng wp_nav_menu
của WordPress để hiển thị các mục menu đã được đăng ký trong phần cài đặt theme.
Mã nguồn:
<?php wp_nav_menu( array( 'theme_location' => 'main_nav', 'container' => 'false', 'menu_id' => 'main-nav', 'menu_class' => 'menu') ); ?>
7. ndev paginate
Mô tả:
Hiển thị phân trang cho các bài viết. Nếu trang có nhiều bài viết hơn số lượng bài viết có thể hiển thị trên mỗi trang, tính năng này sẽ tự động thêm các liên kết phân trang.
Mã nguồn:
<?php if(paginate_links()!='') { ?>
<div class="quatrang">
<?php
global $wp_query;
$big = 999999999;
echo paginate_links(
array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'prev_text' => __('«'),
'next_text' => __('»'),
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
)
);
?>
</div>
<?php } ?>
8. ndev Post
Mô tả:
Kiểm tra và hiển thị các bài viết trên trang. Nếu không có bài viết nào, nó sẽ hiển thị thông báo không có bài viết nào.
Mã nguồn:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php endwhile; else : ?>
<p>Không có bài viết nào!</p>
<?php endif; ?>
9. ndev Query
Mô tả:
Truy vấn và hiển thị một số sản phẩm từ WordPress. Đoạn mã này sử dụng WP_query
để truy xuất bài viết có loại là "product", giới hạn số lượng bài viết và chỉ lấy các bài viết đã được xuất bản.
Mã nguồn:
<?php $args = array( 'post_type' => 'product', 'posts_per_page' => 10, 'post_status' => 'publish'); ?>
<?php $getposts = new WP_query( $args);?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
<?php global $product; ?>
$1
<?php endwhile; wp_reset_postdata(); ?>
Mô tả:
Hiển thị sidebar trên trang nếu sidebar đã được đăng ký trong theme. Dùng để thêm các widget hoặc nội dung phụ vào trang.
Mã nguồn:
<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar') ) : ?><?php endif; ?>
11. ndev Single
Mô tả:
Hiển thị thông tin cụ thể từ một bài viết, ví dụ như trường "luong", ảnh thu nhỏ và teaser.
Mã nguồn:
<?php echo types_render_field('luong'); ?>
<?php show_thumb(370,257,1,'c'); ?>
<?php echo teaser(15); ?>
12. ndev Taxonomy
Mô tả:
Hiển thị liên kết của taxonomy (ví dụ: danh mục công ty) và truy vấn thông tin của đối tượng taxonomy hiện tại, hỗ trợ việc quản lý danh mục và nhãn.
Mã nguồn:
<?php echo get_term_link($company[0]->slug, 'cong-ty'); ?>
<?php
$queried_object = get_queried_object();
$term_id = $queried_object->term_id;
?>
13. ndev-thumb
Mô tả:
Hiển thị hình ảnh thu nhỏ của bài viết, lấy từ ảnh đại diện của bài viết.
Mã nguồn:
<img src='<?php echo wp_get_attachment_url( get_post_thumbnail_id($post->ID) );?>' alt='<?php the_title(); ?>' />
14. ndev Create Table
Mô tả:
Tạo bảng trong cơ sở dữ liệu để lưu trữ thông tin về các tệp tin tải lên của người dùng.
Mã nguồn:
<?php
function ndev_CreateDatabaseUploads(){
global $wpdb;
$charsetCollate = $wpdb->get_charset_collate();
$contactTable = $wpdb->prefix . 'users_uploads';
$createContactTable = "CREATE TABLE IF NOT EXISTS {$contactTable} (
id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
course bigint(20) NOT NULL,
lesson bigint(20) NOT NULL,
file_url varchar(225) NOT NULL,
file_name varchar(225) NOT NULL,
status bigint(5) NOT NULL DEFAULT 1,
date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) {$charsetCollate};";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $createContactTable );
}
add_action('init', 'ndev_CreateDatabaseUploads');
?>
15. ndev Insert Table
Mô tả:
Chèn thông tin vào bảng cơ sở dữ liệu (ví dụ: thông tin người dùng và khóa học mà họ tham gia).
Mã nguồn:
<?php
function Import_Course_Users($user_id, $course, $user_out_sys = null){
$data = array(
'user_id' => $user_id,
'makhoahoc' => $course,
'status' => $user_out_sys ? 0 : 1,
'date' => current_time( 'mysql' )
);
global $wpdb;
$table = $wpdb->prefix . 'users_posts';
$wpdb->insert(
$table,
$data
);
return $users_posts = $wpdb->insert_id;
}
?>
16. ndev setup theme
Mô tả:
Thiết lập các tính năng cơ bản cho theme WordPress, bao gồm hỗ trợ ảnh đại diện, đăng ký sidebar và menu, và thiết lập các bộ lọc và hành động cho các tính năng như bỏ qua chỉnh sửa block editor.
Mã nguồn:
<?php
<?php
function ndev_setup_theme(){
add_theme_support('post-thumbnails');
add_filter( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );
add_filter('use_block_editor_for_post', '__return_false');
// Đăng ký sidebar
if (function_exists('register_sidebar')){
register_sidebar(array(
'name'=> __( 'Sidebar', 'matbaows' ),
'id' => 'sidebar',
'before_widget' => '<div class="widget">',
'after_widget' => "</div>",
'before_title' => '<h3 class="title">',
'after_title' => "</h3>",
));
}
// Đăng ký menu
register_nav_menus(
array(
'main_nav' => __( 'Menu chính', 'matbaows' )
)
);
}
add_action('init','ndev_setup_theme');
?>
17. ndev Init Assets
Mô tả:
Đăng ký và tải các tài nguyên như CSS và JavaScript cần thiết cho website. Đoạn mã này sẽ sử dụng hàm wp_enqueue_script
và wp_enqueue_style
để tải các tệp tin JS và CSS vào trong trang.
Mã nguồn:
<?php
function matbaows_scripts() {
wp_enqueue_style( 'matbaows-style', get_stylesheet_uri(), array(), '1.0' );
wp_enqueue_script( 'matbaows-main', get_template_directory_uri() . 'assets/js/main.js', array(), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'matbaows_scripts' );
?>
Mô tả:
Định nghĩa một đối tượng JavaScript toàn cục cho phép truyền tải các giá trị từ server đến client (như URL của trang chủ, theme URL, các thông tin AJAX), giúp việc xử lý dữ liệu động trên frontend dễ dàng hơn.
Mã nguồn:
<?php
function jsHeader(){
$object_name = 'ajax_object';
$ajaxObject = array(
'ajaxurl' => admin_url('admin-ajax.php'),
'ajax_nonce' => wp_create_nonce('ajax_security'),
'urltheme' => get_theme_file_uri('/'),
'urlhome' => home_url(),
'is_home' => is_home() ? 1 : 0,
'is_mobile' => wp_is_mobile() ? 1 : 0
);
foreach ( (array) $ajaxObject as $key => $value ) {
if ( !is_scalar($value) ) continue;
if ( is_numeric($value) ) continue;
$ajaxObject[$key] = html_entity_decode((string) $value, ENT_QUOTES, 'UTF-8');
}
$script = "var $object_name = " . wp_json_encode($ajaxObject) . ';';
echo "<script type='text/javascript'>\n";
echo "/* <![CDATA[ */\n";
echo $script;
echo "\n/* ]]> */\n";
echo "</script>\n";
}
add_action ( 'wp_head','jsHeader')
?>
19. ndev DB Query
Mô tả:
Thực hiện truy vấn cơ sở dữ liệu để lấy danh sách các khóa học của người dùng. Điều này giúp quản lý thông tin của người dùng dựa trên các dữ liệu có trong bảng cơ sở dữ liệu.
Mã nguồn:
<?php
function get_list_course_by_user($user_id, $status){
global $wpdb;
$table = $wpdb->prefix . 'users_posts';
$table_post = $wpdb->prefix . 'posts';
$sql = "SELECT post.ID FROM $table AS user_post
LEFT JOIN $table_post AS post ON user_post.makhoahoc = post.makhoahoc
WHERE user_post.user_id = %d AND user_post.status = %d AND post.post_status = 'publish'";
$data = $wpdb->get_results($wpdb->prepare($sql, $user_id, $status), ARRAY_A);
if($data){
return $data;
} else {
return array();
}
}
?>
20. ndev DB Update
Mô tả:
Cập nhật thông tin trong cơ sở dữ liệu, ví dụ: gán một khóa học cho bài viết cụ thể.
Mã nguồn:
<?php
function init_makhoahoc($postid){
$data = array(
'makhoahoc' => 19
);
global $wpdb;
$table = $wpdb->prefix . 'posts';
$update = $wpdb->update(
$table,
$data,
array('ID' => $postid)
);
}
?>
21. ndev DB Delete
Mô tả:
Xóa dữ liệu trong cơ sở dữ liệu, ví dụ: xóa người dùng khỏi khóa học.
Mã nguồn:
<?php
function delete_user_course($user_id, $course){
global $wpdb;
$table = $wpdb->prefix . 'users_posts';
$delete = $wpdb->delete(
$table,
array( 'user_id' => $user_id, 'makhoahoc' => $course),
array( '%d', '%s' )
);
}
?>
22. ndev Setup Theme
Mô tả:
Tương tự như ndev setup theme
, nhưng đây là phiên bản khác giúp thiết lập theme, thêm các hỗ trợ và cấu hình cho giao diện.
Mã nguồn:
<?php
add_theme_support('post-thumbnails');
add_filter('show_admin_bar', '__return_false');
add_filter('post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter('use_block_editor_for_post', '__return_false');
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
add_filter( 'use_widgets_block_editor', '__return_false' );
register_nav_menus(
array(
'main_nav' => 'Main menu'
)
);
if (function_exists('register_sidebar')){
register_sidebar(array(
'name'=> 'Sidebar',
'id' => 'sidebar'
));
}
?>
23. ndev Custom Post type
Mô tả:
Đăng ký một loại bài viết tùy chỉnh trong WordPress, ví dụ: loại bài viết "sản phẩm" để quản lý sản phẩm trên website.
Mã nguồn:
<?php
function tao_ndev_post_type(){
$label = array(
'name' => 'Sản phẩm',
'singular_name' => 'Sản phẩm'
);
$args = array(
'labels' => $label,
'description' => 'Post type đăng sản phẩm',
'supports' => array(
'title',
'editor',
'excerpt',
'author',
'thumbnail',
'comments',
'trackbacks',
'revisions',
'custom-fields'
),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-cart',
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post'
);
register_post_type('sanpham', $args);
}
add_action('init', 'tao_ndev_post_type');
?>
24. ndev Custom Taxonomy
Mô tả:
Đăng ký một taxonomy tùy chỉnh, ví dụ: một taxonomy cho "địa điểm" mà bài viết có thể liên kết.
Mã nguồn:
<?php
function location_ndev_taxonomy() {
$labels = array(
'name' => 'Địa điểm',
'singular' => 'Địa điểm',
'menu_name' => 'Địa điểm'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy('dia-diem', 'post', $args);
}
add_action( 'init', 'location_ndev_taxonomy', 0 );
25. ndev Count Views
Mô tả:
Theo dõi số lượt xem của bài viết. Khi một bài viết được xem, số lượt xem sẽ được cập nhật trong metadata của bài viết.
Mã nguồn:
<?php
function setpostview($postID){
$count_key ='views';
$count = get_post_meta($postID, $count_key, true);
if($count == ''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
} else {
$count++;
update_post_meta($postID, $count_key, $count);
}
}
function getpostviews($postID){
$count_key ='views';
$count = get_post_meta($postID, $count_key, true);
if($count == ''){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return 0;
}
return $count;
}
?>
26. ndev-field-text
Mô tả:
Hiển thị giá trị của một trường văn bản từ Advanced Custom Fields (ACF). Nếu trường có giá trị, nó sẽ hiển thị giá trị đó.
Mã nguồn:
<?php $text_value = get_field('your_text_field'); ?>
<?php if ($text_value): ?>
<p><?php echo esc_html($text_value); ?></p>
<?php endif; ?>
27. ndev-field-image
Mô tả:
Hiển thị hình ảnh từ trường ACF nếu có. Đoạn mã này sẽ lấy URL và alt text của hình ảnh và hiển thị nó trong trang.
Mã nguồn:
<?php $image = get_field('your_image_field'); ?>
<?php if ($image): ?>
<img src='<?php echo esc_url($image['url']); ?>' alt='<?php echo esc_attr($image['alt']); ?>' />
<?php endif; ?>
28. ndev-field-repeater
Mô tả:
Hiển thị các giá trị từ trường repeater của ACF. Nó sẽ hiển thị các mục con trong một danh sách.
Mã nguồn:
<?php if (have_rows('your_repeater_field')): ?>
<ul>
<?php while (have_rows('your_repeater_field')): the_row(); ?>
<li><?php the_sub_field('your_sub_field'); ?></li>
<?php endwhile; ?>
</ul>
<?php else: ?>
<p>Không có dữ liệu</p>
<?php endif; ?>
29. ndev-field-select
Mô tả:
Hiển thị giá trị đã chọn từ trường chọn (select) trong ACF.
Mã nguồn:
<?php $select_value = get_field('your_select_field'); ?>
<?php if ($select_value): ?>
<p>Giá trị đã chọn: <?php echo esc_html($select_value); ?></p>
<?php endif; ?>
30. ndev-field-gallery
Mô tả:
Hiển thị một thư viện ảnh từ trường gallery trong ACF. Tất cả ảnh trong thư viện sẽ được lặp qua và hiển thị.
Mã nguồn:
<?php $gallery = get_field('your_gallery_field'); ?>
<?php if ($gallery): ?>
<div class='gallery'>
<?php foreach ($gallery as $image): ?>
<img src='<?php echo esc_url($image['url']); ?>' alt='<?php echo esc_attr($image['alt']); ?>' />
<?php endforeach; ?>
</div>
<?php endif; ?>
31. ndev-field-object
Mô tả:
Hiển thị thông tin của một bài viết liên kết từ trường đối tượng (post object) trong ACF. Nó sẽ hiển thị tiêu đề bài viết và liên kết đến bài viết đó.
Mã nguồn:
<?php $post_object = get_field('your_post_object_field'); ?>
<?php if ($post_object): ?>
<h2><a href='<?php echo get_permalink($post_object->ID); ?>'><?php echo esc_html($post_object->post_title); ?></a></h2>
<p><?php echo esc_html($post_object->post_excerpt); ?></p>
<?php endif; ?>