Tạo trang đăng bài cho thành viên wordpress không cần plugin

Tạo trang đăng bài cho thành viên wordpress không cần plugin một cách chuyên nghiêp dễ dàng tùy biến theo ý muốn.

Tạo trang đăng bài cho thành viên wordpress không cần plugin
4.7 (94.55%) 33 votes
Tạo trang đăng bài cho thành viên wordpress không cần plugin
Có khá nhiều bạn quan tâm đến vấn đề tạo trang đăng bài cho thành viên như ở Vnkings.Com vậy nên trong bài viết này Mình sẽ giúp các bạn tạo được 1 trang đăng bài như thế một cách đơn giản nhất.

Tạo trang đăng bài cho thành viên wordpress không cần plugin

Ưu điểm Tạo trang đăng bài cho thành viên wordpress không cần plugin :

  • Dễ dàng tùy biến theo ý muốn
  • không sử dụng quá nhiều trường không cần thiết khi đăng bài
  • Không cần sử dụng javascript như Plugin, giúp cho Website bạn load nhẹ hơn

 
Nhược điểm

  • Bạn cần có 1 chút kiến thức cơ bản về html,php nếu muốn hiểu hơn về cách làm trang này.

 

Bắt đầu nào :

Đầu tiên Bạn cần tạo 1 file đăng bài: dang-bai.php
Mình sẽ viết và giải thích từng phần. Sau đó sẽ có 1 file hoàn tất.

 

– kiểm tra xem thành viên đã đăng ký hay chưa, nếu đã đăng ký thì lấy thông tin thành viên, ngược lại nếu chưa đăng ký thì hiện khung đăng nhập:

<?php
/*
 Template Name: Đăng bài
 */
 ?>
<?php if(is_user_logged_in()) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
$vnkings =  $current_user->user_level;
if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
?>
// form đăng bài
<?php } else { ?>
<div class="formdangnhap">
    <?php wp_login_form(); ?>            
</div>
<?php } ?>

Giải thích đoạn code :

  • Template Name: Đăng bài : Tạo template Đăng bài.
  • if(is_user_logged_in()) { : Nếu là thành viên đăng nhập.
  • $user_id = get_current_user_id(); : Lấy id của thành viên.
  • $current_user = wp_get_current_user(); : Lấy tất cả thông tin thành viên.
  • $vnkings = $current_user->user_level; : Lấy User level.
  • if($vnkings <= 2) { $vnstatus = “pending”; } else { $vnstatus = “publish”; } : Kiểm tra user đang là quyền gì, nếu là Thành viên đăng ký thì bài viết sẽ được cho vào dạng chờ xét duyệt, nếu là Tác giả trở lên thì cho phép Public bài viết luôn.
  • wp_login_form(); : form đăng nhập mặc định của wordpress

 

-Thêm form đăng bài : trong form này mình đã tạo theo cấu trúc của Bootstrap cho các bạn dễ tùy biến.

<div id="vnkings_postBox">
	<form id="new_post" class="form-horizontal" method="post" action="" enctype="multipart/form-data">
		<div class="form-group vnking_pd col-sm-12 col-md-6">
			<label for="post_title">Tiêu đề</label>
			<input type="text" name="post_title" class="form-control" placeholder="Tiêu đề">
		</div>
		<div class="form-group vnking_pd pd_0">
		  <label for="post_content">Nội Dung</label>
		  <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_content">Danh mục</label>
			<?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
				preg_match_all('/s*<option class="(S*)" value="(S*)">(.*)</option>s*/', $categories, $matches, PREG_SET_ORDER);
				echo "<select id='post_category' class='form-control' name='post_category'>";
				foreach ($matches as $match){
				echo "<option value='{$match[2]}'>{$match[3]}</option>";
				}
				echo "</select><br />n";
			?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_tags">Từ khóa</label>
		  <input type="text" name="post_tags" class="form-control" placeholder="Từ khóa">
		</div>
		<div class="form-group">
			<p><img id="output_avatar"/></p>
			<script>
			  var loadFile = function(event) {
				var output = document.getElementById('output_avatar');
				output.src = URL.createObjectURL(event.target.files[0]);
				 $('#output_avatar').addClass('active-avatar');
			  };
			</script>
			<span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">
			</span>
		</div>
		<input type="hidden" name="add_new_post" value="post" />
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
		<div class="form-group">
			<div class="col-sm-12" style="padding-left:0;">
			  <button type="submit" class="btn btn-primary">Đăng Bài</button>
			</div>
		</div>
	</form>
</div>

Giải thích đoạn code :

Trong form này các bạn cần tạo các trường cơ bản như :

  • input name=”post_title” :Nhập Tiêu đề
  • wp_editor() :Tạo Form nội dung mặc định của WordPress
  • wp_dropdown_categories() : Chọn danh mục cho bài viết của bạn
  • input name=”post_tags” : Nhập tags bài viết
  • input name=”file” : Tạo ảnh đại diện bài viết
  • wp_nonce_field() : Bảo mật cho form bài viết, giúp chứng thực sự hoạt động của người dùng nếu form đăng bài gửi đi

 
– Kiểm tra dữ liệu và đăng bài viết

<?php if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['add_new_post'] ) && current_user_can('level_0') && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' )) {
if (isset($_POST['post_title'])) {
	$post_title = $_POST['post_title'];
}
if (isset($_POST['post_content'])) {
	$post_content = $_POST['post_content'];
}
else {
	echo 'Please enter the content';
}
if (isset ($_POST['post_category'])) {
	$post_category = $_POST['post_category'];
}
if (isset($_POST['post_tags'])) {
	$post_tags = $_POST['post_tags'];
}
$post = array(
	'post_title'    => wp_strip_all_tags($post_title),
	'post_content'  => $post_content,
	'post_category' => array($post_category),
	'tags_input'    => $post_tags,
	'post_status'   => $vnstatus,
	'post_type' => 'post',
);
$vnkings_post_id = wp_insert_post($post);

if ($_FILES) {
	foreach ($_FILES as $file => $array) {
	$newupload = insert_attachment($file,$vnkings_post_id);
	}
}
echo '<div class="alert alert-success"><strong>Bạn đã đăng bài thành công!</strong></div>';
}?>

Giải thích đoạn code : :

  • if( $_SERVER[‘REQUEST_METHOD’] == ‘POST’ && !empty( $_POST[‘add_new_post’] ) : Khi có hành động gửi bài viết có yêu cầu là POST
  • current_user_can(‘level_0’) : thành viên cần là thành viên đăng ký
  • isset( $_POST[‘post_nonce_field’] ) && wp_verify_nonce( $_POST[‘post_nonce_field’], ‘post_nonce’ ) : Tồn tại và xác nhận trường post_nonce_field (Bảo mật)
  • if (isset($_POST[‘tên trường’])) : Kiểm tra đã nhập các trường bên trên hay chưa.
  • $post = array() Tổng hợp các trường vào 1 mảng với cấu trúc của WordPress
  • wp_insert_post($post) Tiến hành thêm bài viết với các trường đã được nhập
  • if ($_FILES) – insert_attachment() Nếu tồn tại file ảnh thì thực hiện thêm vào ảnh đại diện

 
Như vậy chúng ta có File dang-bai.php đầy đủ như sau :

<?php
/*
 Template Name: Đăng bài
 */
?>
<?php if(is_user_logged_in()) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
$vnkings =  $current_user->user_level;
if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
?>

<div id="vnkings_postBox">
	<form id="new_post" class="form-horizontal" method="post" action="" enctype="multipart/form-data">
		<div class="form-group vnking_pd col-sm-12 col-md-6">
			<label for="post_title">Tiêu đề</label>
			<input type="text" name="post_title" class="form-control" placeholder="Tiêu đề">
		</div>
		<div class="form-group vnking_pd pd_0">
		  <label for="post_content">Nội Dung</label>
		  <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_content">Danh mục</label>
			<?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
				preg_match_all('/s*<option class="(S*)" value="(S*)">(.*)</option>s*/', $categories, $matches, PREG_SET_ORDER);
				echo "<select id='post_category' class='form-control' name='post_category'>";
				foreach ($matches as $match){
				echo "<option value='{$match[2]}'>{$match[3]}</option>";
				}
				echo "</select><br />n";
			?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_tags">Từ khóa</label>
		  <input type="text" name="post_tags" class="form-control" placeholder="Từ khóa">
		</div>
		<div class="form-group">
			<p><img id="output_avatar"/></p>
			<script>
			  var loadFile = function(event) {
				var output = document.getElementById('output_avatar');
				output.src = URL.createObjectURL(event.target.files[0]);
				 $('#output_avatar').addClass('active-avatar');
			  };
			</script>
			<span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">
			</span>
		</div>
		<input type="hidden" name="add_new_post" value="post" />
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
		<div class="form-group">
			<div class="col-sm-12" style="padding-left:0;">
			  <button type="submit" class="btn btn-primary">Đăng Bài</button>
			</div>
		</div>
	</form>
</div>
<?php if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['add_new_post'] ) && current_user_can('level_0') && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' )) {
if (isset($_POST['post_title'])) {
	$post_title = $_POST['post_title'];
}
if (isset($_POST['post_content'])) {
	$post_content = $_POST['post_content'];
}
else {
	echo 'Please enter the content';
}
if (isset ($_POST['post_category'])) {
	$post_category = $_POST['post_category'];
}
if (isset($_POST['post_tags'])) {
	$post_tags = $_POST['post_tags'];
}
$post = array(
	'post_title'    => wp_strip_all_tags($post_title),
	'post_content'  => $post_content,
	'post_category' => array($post_category),
	'tags_input'    => $post_tags,
	'post_status'   => $vnstatus,
	'post_type' => 'post',
);
$vnkings_post_id = wp_insert_post($post);

if ($_FILES) {
	foreach ($_FILES as $file => $array) {
	$newupload = insert_attachment($file,$vnkings_post_id);
	}
}
echo '<div class="alert alert-success"><strong>Bạn đã đăng bài thành công!</strong></div>';
}?>

<?php } else { ?>
<div class="formdangnhap">
	<?php wp_login_form(); ?>			
</div>
<?php } ?>

Chưa hết, bạn cần thêm 1 đoạn Function hỗ trợ đoạn thêm ảnh đại diện bài viết ở bên trên
– Thêm đoạn function này vào file Functions.php trong thư mục Theme WordPress bạn đang sử dụng:

function insert_attachment($file_handler,$post_id,$setthumb='false') {
    // check to make sure its a successful upload
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    $attach_id = media_handle_upload( $file_handler, $post_id );
 
    if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
    return $attach_id;
}

– Cuối cùng là bạn vào Trang quản trị > Trang > Tạo trang > Đăng bài (chọn template là Đăng bài):

Tạo trang đăng bài cho thành viên wordpress không cần plugin

Sau đó bạn có thể xem kết quả với link page vừa tạo
Demo đăng bài vnkings : https://wordpress.vnkings.com/dang-bai.html

Với các bước bên trên bạn đã tạo được cho mình 1 trang đăng bài viết cho thành viên ở WordPress mà không cần sử dụng đến Plugin

Chúc các bạn thành công!

Bài liên quan

  1. vào đâu để lập form này hả anh, em tạo trang mới vẫn không thành công anh ạ

    • Đầu tiên bạn tạo 1 template là đăng ký, sau đó thêm đoạn code kia vào. tiếp đến vào tạo trang chọn template đăng ký kia là xong nhé
      —————————————–
      Mình vừa teamview cho bạn rồi nhé

      • bác cho em ? sao em bị lỗi không lấy ra chuyên mục được vậy ạ Warning: preg_match_all(): Unknown modifier ‘o’ in C:\xampp\htdocs\oto.com\wp-content\themes\accelerate\page-templates\dangbai.php on line 34 lỗi này là lỗi gì nhỉ bác ơi

          • em cũng bị lỗi như này bác cho em ? sao em bị lỗi không lấy ra chuyên mục được vậy ạ Warning: preg_match_all(): Unknown modifier ‘o’

            và dòng đó của em là bị cái này ạ

            <?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
            preg_match_all('/s*(.*)s*/’, $categories, $matches, PREG_SET_ORDER);
            echo “”;
            foreach ($matches as $match){
            echo “{$match[3]}”;
            }
            echo “n”;
            ?>

    • Nếu bạn muốn upload nhiều hình thì có thể dùng cách này:
      phần input upload bạn thay bằng:

         <input type="file" id="image" name="image[]" onchange="updateList();" multiple="multiple" >
         <ul id="file_list"></ul>
      <script>
      function updateList(){
          //get the input and UL list
          var input = document.getElementById('image');
          var list = document.getElementById('file_list');
      
          //empty list for now...
          while (list.hasChildNodes()) {
            list.removeChild(ul.firstChild);
          }
      
          //for every file...
          for (var x = 0; x < input.files.length; x++) {
            //add to list
            var li = document.createElement('li');
            li.innerHTML = 'File ' + (x + 1) + ':  ' + input.files[x].name;
            list.append(li);
          }
      }
      </script>
      

      Tiếp theo bạn cần đoạn function này để xử lý ảnh upload lên:

      function fix_file_array(&$files) {
          $names = array(
              'name' => 1,
              'type' => 1,
              'tmp_name' => 1,
              'error' => 1,
              'size' => 1
          );
          foreach ($files as $key => $part) {
              // only deal with valid keys and multiple files
              $key = (string) $key;
              if (isset($names[$key]) && is_array($part)) {
                  foreach ($part as $position => $value) {
                      $files[$position][$key] = $value;
                  }
                  // remove old key reference
                  unset($files[$key]);
              }
          }
      }
      
      
      function insert_attachment($file_handler,$post_id,$setthumb='false') {
          require_once(ABSPATH . "wp-admin" . '/includes/image.php');
          require_once(ABSPATH . "wp-admin" . '/includes/file.php');
          require_once(ABSPATH . "wp-admin" . '/includes/media.php');
          $attach_id = media_handle_sideload( $file_handler, $post_id );
          if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
          return $attach_id;
      }
      

      Cuối cùng là đoạn check nếu có file ở dưới đoạn input :

      if ($_FILES) {
          fix_file_array($_FILES[$name]);
          foreach ($_FILES[$name] as $file => $fileitem){
              $newupload = insert_attachment($fileitem,$real_post_id);
          }
      }
      

      Chúc bạn thành công

        • Bạn có thể dùng cách này:

          <?php
          $vnkings_id = array( 'post_parent' => get_the_ID());
          $post_attachments = get_children($vnkings_id);
          if($post_attachments) {
          	foreach ($post_attachments as $attachment) {
          		echo $attachment->ID;
          	}
          }
          ?>
          
    • Bạn có dùng Teamview không, mình giúp bạn tạo trang đăng nhập.
      Vì cấu trúc trang bạn và trang mình khác nhau nêu có đưa bạn cả file cũng không hợp HTML/CSS

      • Chào Bạn, bài viết rất hay. Xong theme của mình CSS không đúng nên bị vỡ bể hết, mặc dù các thuộc tính có hiển thị. Bạn có thể Edit bằng team view cho mình được không ? Cảm ơn và có hậu tạ bạn nhé. Số của mình 0968.022.948

  2. Bạn cho mình hỏi chút được không vậy. Mình muốn tạo 1 page đăng bài cho thành viên nhưng trong bài đăng yêu cầu có hình ảnh, kích cỡ chính xác và bắt buộc kích cỡ như vậy mới được đăng. Thứ hai là phần quản lý sét duyệt. VD như đăng bài xong mình phải duyệt bài mới cho đăng. Bạn có thể giúp mình được không vậy. Thanks !

    • Vấn đề 1 :
      Bạn có thể dùng 1 đoạn javascript để check kích cỡ và dung lượng:

      $('.btn-primary').click( function() {
         //kiểm tra trình duyệt có hỗ trợ File API
          if (window.File && window.FileReader && window.FileList && window.Blob)
          {
             // lấy dung lượng và kích thước, kiểu file từ input
              var fsize = $('#i_file')[0].files[0].size;
              var ftype = $('#i_file')[0].files[0].type;
              var fname = $('#i_file')[0].files[0].name;
       
              if(fsize>1048576)  //thuc hiện lệnh nếu dung lượng vượt quá 1MB
              {
                  alert("Type :"+ ftype +" | "+ fsize +" bites\n(File: "+fname+") Quá lớn!");
              }else{
                  alert("Type :"+ ftype +" | "+ fsize +" bites\n(File :"+fname+") File ổn đó!");
              }
          }else{
              alert("Vui lòng nâng cấp trình duyệt của bạn, bởi vì trình duyệt hiện tại của bạn thiếu một số tính năng mới, chúng ta cần!");
          }
      });
      

      Vấn đề 2
      bài viết trên mình có 1 đoạn check user : nếu là tác giả trở lên thì cho phép bài publish luôn, còn là thành viên đang ký thì sẽ dạng chờ sét duyệt, bạn cũng có thể sửa nó để tác giả cũng cần duyệt :

      if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
      // thay số 2 thành số 3 thì tác giả cũng cần duyệt bạn nhé
      

      Mong nó giúp được bạn!

      • Cám ơn bạn, những nội dung của bạn rất hữu ích, mình muốn làm quen với bạn có thể pm qua sky hay fb không nhỉ. Nếu bạn trao đổi textlink có thể ngó qua site mình 😀 taplamseo.com 🙂
        Rất cám ơn về sự giúp đỡ của bạn.

  3. if ($_FILES) {
    fix_file_array($_FILES[$name]);
    foreach ($_FILES[$name] as $file => $fileitem){
    $newupload = insert_attachment($fileitem,$real_post_id);
    }
    }

    Đoạn này chèn dưới input cụ thể là chỗ nào cậu?
    Phần danh mục nó cũng không hiện Category ra nữa

  4. bài viết rấy hay và chi tiết. hy vọng sẽ có thêm nhiều bài hay như thế này… nếu có thể làm web shop, tin tức = wordpress không sử dụng plugins thì quá hay

    • Trong đoạn code trên bạn để ý đoạn:
      if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; } // nếu bạn muốn tất cả mọi người đăng cần lưu chờ duyệt thì bạn đặt số 2 thành số 10 bạn nhé

  5. Warning: preg_match_all(): Unknown modifier ‘o’ in C:\xampp\htdocs\oto.com\wp-content\themes\accelerate\page-templates\dangbai.php on line 34 lỗi này là lỗi gì nhỉ bác ơi

  6. Cám bài viết chi tiết của ad. trước mình có nghĩ tới việc tạo trang đăng bài nhưng là sử dụng plugin. Nhung thấy cái giao diện của plugin xấu quá. Sẽ áp dụng thử cách này của bạn.

  7. Chưa hiểu lắm, làm theo mà sao không có phần template Đăng Bài khi tạo trang mới !
    Cũng chưa thấy mối liên hệ giữa file dang-bai.php với funtion ?
    Giải thích cụ thể hơn được không bạn ơi ?

    • Vấn đề 1:
      Sau khi bạn tạo 1 file php có nội dung như sau :

      <?php
      /*
       Template Name: Đăng bài
       */
       ?>
      

      Thì trong phần chọn template page sẽ có thêm 1 cái là : Đăng bài
      Bạn xem lại xem trong file dang-bai.php đã có đoạn đó chưa nhé.

      Vấn đề 2:
      Mối liên hệ giữa dang-bai.php với funtions:
      Bạn có thể thấy trong file dang-bai.php có 1 đoạn là

      $newupload = insert_attachment($file,$vnkings_post_id);
      

      Và 1 đoạn chèn vào funtions để xử lý cho yêu cầu insert_attachment là:

      function insert_attachment
  8. nếu up kiểu này thì nó sẽ có 2 ảnh trên thư viện, up ảnh đại diện thì sẽ có 1 cái và ảnh thư viện 1 cái nữa.
    có cách nào để up 1 ảnh dùng cho cả 2 k ad

    • Bạn up thẳng vào thư mục Theme đang sử dụng nhé.
      ngang bằng với các file index.php, functions.php, header.php, footer.php

  9. Nếu mình muốn có thêm form để nhập các thông tin thêm như metaboxs thì làm sao nhỉ 😀

    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="post_tags">Trường của bạn</label>
                <input type="text" name="post_truongcuaban" class="form-control" placeholder="Trường của bạn">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $post_truongcuaban = $_POST['post_truongcuaban'];
      update_post_meta($vnkings_post_id,'post_truongcuaban',$post_truongcuaban);
      

      Chúc bạn thành công!

  10. Mình tạo xong tất cae đều ok nhưng bị lỗi thế này ở chỗ chọn danh mục
    Warning: preg_match_all(): Unknown modifier ‘o’ in /home/xxx/wp-content/themes/xxx/dangbai.php on line 40

  11. mình làm theo mà khung soạn thảo hiển thị trắng chứ ko có các shortcode bạn ơi

    • Bạn kiểm tra xem Theme của bạn ở Header có:

      <?php wp_head(); ?>

      và footer có:

      <?php wp_footer(); ?>

      Chưa nhé, đây là các hàm lấy ra các file css, js, ajax hỗ trợ cho Form.

  12. Những bạn bị lỗi không tương thích với hàm preg_match_all():

    Warning: preg_match_all(): Unknown modifier
    

    Thì thay code chỗ category:

    <?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
                    preg_match_all('/s*<option class="(S*)" value="(S*)">(.*)</option>s*/', $categories, $matches, PREG_SET_ORDER);
                    echo "<select id='post_category' class='form-control' name='post_category'>";
                    foreach ($matches as $match){
                    echo "<option value='{$match[2]}'>{$match[3]}</option>";
                    }
                    echo "</select><br />n";
                ?>
    

    Thành:

    <?php $categories = wp_dropdown_categories( array( 'echo' => 0, 'taxonomy' => 'category', 'hide_empty' => 0 ) );
    $categories = str_replace( "name='cat' id=", "name='post_category' id=", $categories );
    echo $categories; ?>
    

    Cảm ơn các bạn đã luôn ủng hộ Vnkings.com

    • Em xem trên File Header.php có:

      <?php wp_head(); ?>

      File Footer.php có:

      <?php wp_footer(); ?>

      Kiểm tra xem có chưa nhé.
      Đây là các các hàm lấy ra các đoạn script hỗ trợ mặc định của wordpress cho Front-end.

  13. Bạn ơi, lúc mà mình k chọn ảnh đại diện, vẫn tạo đc bài viết, nhưng mà vào trong dashboard thì lỗi chỗ hình đại diện, nên cái khung soạn thảo lỗi theo, còn chọn ảnh đại diện lúc post thì k có lỗi j hết

    • Nếu bạn muốn trường đó là trường bắt buộc nhập thì ở phần input file:

      <span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">

      Bạn thêm đoạn này vào nhé:

      required=""

      kết quả sẽ là:

      <span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" required="" type="file" class="file" onchange="loadFile(event)">

      Sau khi hoàn thành, ai viết bài ở web bạn sẽ bắt buộc phải up ảnh đại diện, nêu không nó không cho đăng bài.

  14. Cho em hỏi là nếu post của em có custom taxonomies và custom fields thì làm sao để có thể cho người dùng nhập vào các trường này ở trang đăng bài được vậy ad?

  15. Chào bạn,

    Mình làm giống bạn thì đăng bài được. Nhưng nếu đăng nhập vào bằng user có quyền là thành viên đăng ký thì lại không hiện ra mục thêm media để chèn ảnh vào bài viết. Làm sao để cấp quyền cho user trong nhóm thành viên đăng ký cũng chèn ảnh được.
    2/ Trong mục quản lý media, có cách nào cấm người dùng xoá ảnh không phải do mình đăng được không, vì có những user khác lỡ tay xoá mất hình thì bài cũ sẽ bị mất hình đăng.
    Cám ơn

  16. bài viết rất bổ ích. thank ad
    có cách nào tạo trang đăng bài giống thế này ko nhỉ. dienthoaibmt.com

  17. Warning: preg_match_all(): Unknown modifier ‘o’ in /home/u918119383/public_html/wp-content/themes/lighthouse/dang-bai.php on line 35
    em bị lỗi này thì sửa sao được ạ

    Code dong 35:

    preg_match_all(‘/s*(.*)s*/’, $categories, $matches, PREG_SET_ORDER);

  18. get_queried_object(); wp_editor( $post_obj->post_content, ‘userpostcontent’, array( ‘textarea_name’ => ‘post_content’ ));?>

    Đoạn này em thêm vào rồi, nhưng các nút soạn thảo không hiển thị, rồi nút thêm hình ảnh cũng không hoạt động là sao vậy ạ https://prnt.sc/fampv0

    • Em kiểm tra xem file header.php có:

      <?php wp_head(); ?>

      File footer.php có

      <?php wp_footer(); ?>

      không nhé, đây là các hàm lấy thư viện css và js hỗ trợ cho các chức năng ngoài Front end.

  19. Là thành viên đăng kí thì không hiện nút add media a ơi..làm sao để thành viên củng add được ảnh cho bài viết ạ.

    • Bạn để ý dòng này:

      <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
      

      Thêm:

      'media_buttons' => true

      Hoàn chỉnh:

      <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content','media_buttons' => true ));?>
      
      • A ơi giờ e muốn chỗ thêm ảnh hiển thị cho bài viết thì lấy ảnh từ thư viện media wordpress để giảm bớt trường hợp ảnh đã có trong thư viện rồi thì làm sao ạ

      • mình thêm ‘media_buttons’ => true mà vẫn ko lên được add à, dưới local ko thêm thì vẫn chạy bình thường , lên host thì mất

  20. add cho mình hỏi với , cái nút thêm media của mình ở dươi local thì hiện , mà lên host thì nó lại mất hẳn luôn soi trình duyệt cũng ko thấy !…

    • Em thêm hàm

      <?php if(is_user_logged_in()) { 
      // code bảng đăng bài
      }
      ?>
      

      Như vậy chỉ những người đăng nhập mới xem được bảng đăng bài của em.

  21. Warning: preg_match_all(): Unknown modifier ‘o’ in C:\xampp\htdocs\~ducn\easyit\wp-content\themes\wplms\dang-bai.php on line 26

    Lỗi này fix sao vậy AD ơi

  22. line 26 code nó ntn preg_match_all(‘/s*(.*)s*/’, $categories, $matches, PREG_SET_ORDER); đang cần gấp lắm AD giúp mình với

  23. Bạn ơi mình dùng Kleo theme có các template sẵn, mình thêm file php vào nhưng không thấy mục chọn template này trong page, bạn giúp mình với

  24. Chào anh,
    Hiện em đang sử dụng đoạn code này để tự động thêm link cho từ khóa.

    function auto_add_affiliate_links($text){
    $replace_words = array(
    ‘WordPress’ => ‘Blog thủ thuật WordPress‘,
    ‘Plugin’ => ‘Cài đặt Plugin‘,
    ‘Theme Free’ => ‘Theme miễn phí
    );
    $text = str_replace(array_keys($replace_words), $replace_words, $text);
    return $text;
    }
    add_filter(‘the_content’, ‘auto_add_affiliate_links’);
    add_filter(‘the_excerpt’, ‘auto_add_affiliate_links’);

    Nhưng nó chỉ áp dụng cho phần content mặc định thôi. Bài viết của em có sử dụng cả các post meta nữa. Giờ làm sao để áp dụng được cho nó nhỉ?

    em thử thêm dòng sau thì bị lỗi.

    add_filter(‘get_post_metadata’, ‘auto_add_affiliate_links’);

    • Bạn tạo một Meta Field cho Post là: dinh_dang

      Trong file đăng bài bạn tạo thêm 1 đoạn để chọn định dạng:

       <div class="form-group">
        <label for="sel1">Định dạng bài viết</label>
        <select class="form-control" name="dinh_dang">
          <option>audio</option>
          <option>video</option>
          <option>article</option>
        </select>
      </div> 
      

      Phần xử lý bạn thêm đoạn này:

      if (isset($_POST['dinh_dang'])) {
          $dinh_dang = $_POST['dinh_dang'];
      }
      update_post_meta( $vnkings_post_id, 'dinh_dang', $dinh_dang);
      
    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="post_gia">Giá</label>
                <input type="text" name="post_gia" class="form-control" placeholder="Giá">
      </div>
      <div class="form-group vnking_pd col-md-6">
                <label for="post_link_down">Link Download</label>
                <input type="text" name="post_link_down" class="form-control" placeholder="Link Download">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $post_gia = $_POST['post_gia'];
      $post_link_down = $_POST['post_link_down'];
      update_post_meta($vnkings_post_id,'post_gia',$post_gia);
      update_post_meta($vnkings_post_id,'post_link_down',$post_link_down);
      

      Chúc bạn thành công!

  25. bạn ơi cho mình hỏi làm sao đưa sản phảm của nó vào danh mục sản phẩm trong woocommecer ? bạn giúp mình nhé

  26. Xin chào, mình muốn dùng hàm wp_insert_post() để đăng bài, là mình tự đăng, không phải cho thành viên khác đăng và không cần form nhập liệu, chương trình php sẽ tự get dữ liệu từ chỗ khác, ví dụ mình tạo trang là postbai.php, vậy trang này cần đặt ở thư mục nào để chạy được, cần include thêm file gì của wp… bạn chỉ mình với, mong sớm nhận được câu trả lời

    • Chào bạn, Bạn có thể tạo 1 custom page template.
      Ví dụ bạn tạo 1 file postbai.php trong thư mục theme, bạn chỉ cần thêm đoạn đầu là

      <?php
      /*
       Template Name: Đăng bài
       */
      ?>
      // code lấy và đăng tự động của bạn
      

      Sau bạn vào Trang quản trị > Page > Tạo page, rồi chọn template là: Đăng bài

      Như vậy là xong.

  27. E dùng metabox type= image_advanced để đăng nhiều hình ảnh làm sldier. Giờ ở trang đăng bài phải làm thế nào để khi người dùng đăng hình ảnh thì trong metabox của e cũng hiện những hình ảnh đó vậy anh?

      • vậy làm theo cách đăng nhiều hình ảnh của anh thì có cách nào hiển thị nó trong wp_admin không ạ? giống như đăng ảnh đại diện ở trang đăng bài thì phía trong nó hiện ảnh đại diện đó

  28. Mình làm y chang và đã post được bài. Nhưng bị lỗi nút Add Media click vào ko hiển thị hộp thoại để add media giống trong admin (nghĩa là click vô Add Media nhưng ko có hành động gì xảy ra)
    Đã có wp_head và wp_footer trong file header.php và footer.php
    Mong bạn giúp đỡ mình fix lỗi này với ạ

      • Mình xem thì nó bị lỗi gì đó liên quan tới wp_head(), nếu bỏ cái wp_head đi thì nó chạy ngon lành, vì thế mình làm theo kiểu copy hết file header qua file post-bai luôn ko sài get_header ở file post-bài nữa thì chạy ngon lành rồi. Cảm ơn bạn nha !

      • À cái ô từ khoá mình muốn nó hiện thêm phần những từ khoá đã có để thành viên click vô nó tự add từ khoá đó vô thì làm thế nào hả bạn

  29. M làm theo mà phần Danh Mục chẳng hiển thị ! Có ai rành về code giúp m với ! Ngoài danh mục theo dạng cataloge thì có thể lấy theo taxonomy của customer post không ?

Bình luận bài viết

Bạn có thể dùng các thẻ HTML này:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

X

Tạo live chat facebook cho website

Bạn cần tư vấn ?