您好,我正在尝试为post_type
=“post”设置默认的特色图像,但不包括post_type
=“page”。
我在子主题的函数文件中编写了以下代码,但始终出现此错误:
注意:试图在中获取非对象的属性
/home/ossetto/public_html/wp content/themes/sport child/functions.php
在线18
function wpforce_featured()
{
global $post;
$post_type = get_post_type($post->ID);
if ($post_type === 'post')
{
$already_has_thumb = has_post_thumbnail($post->ID); // If post have a featured image use that.
if (!$already_has_thumb)
{
//If post does not have a featured image then get the first post image and set as featured image.
$attached_image = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1"); // Number 1 relates to taking post image number 1 and adding it as a featured image.
if ($attached_image)
{
foreach ($attached_image as $attachment_id => $attachment)
{
set_post_thumbnail($post->ID, $attachment_id);
//$attachment_id = attachment_url_to_postid( $image_url );
//echo $attachment_id;
}
}
else
{
set_post_thumbnail($post->ID, '27264'); // Find attachment media id by right clicking the image in the Media library and selecting inspect element. Look for the data-id number. This number is then added to the post id.
}
}
}
}
//end function
add_action('the_post', 'wpforce_featured');
add_action('save_post', 'wpforce_featured');
add_action('draft_to_publish', 'wpforce_featured');
add_action('new_to_publish', 'wpforce_featured');
add_action('pending_to_publish', 'wpforce_featured');
add_action('future_to_publish', 'wpforce_featured');
任何帮助都将不胜感激。
谢谢。
最佳答案
有两件事尚不清楚:
为什么要在the_post
、save_post
和其他钩子中一起执行此操作。
知道哪一行是第18行会有帮助,但我猜是这一行:$post_type = get_post_type( $post->ID );
。
但是,您得到通知的原因是,这些操作并不一定都准备好了$post
对象。此外,这些操作都有不同的函数签名,在不同的地方传递global $post
作为参数。
考虑到所有的过滤器,你需要在你的函数周围创建一个“抽象”或“包装器”,这样你就可以在参数正确的位置用“cc>”恰当地调用它。
查看文档以查看传递$post
的位置示例:
the_post action-仅作为参数传递
save_post action-作为第二个参数传递
draft_to_published(和其他钩子)-作为第三个参数传递
// New function that accepts proper parameters for save action
function wpforce_featured_on_save( $post_id, $post, $update ) {
// No need to duplicate code. Instead, call your original function
// passing it the $post parameter
wpforce_featured_status( $post );
}
// New function that accepts proper parameters for these actions
function wpforce_featured_on_status_change( $new, $old, $post ) {
// No need to duplicate code. Instead, call your original function
// passing it the $post parameter
wpforce_featured( $post );
}
// Your original function with slight modifications
// NOTE: ONLY accepts $post object - no global post
function wpforce_featured( $post ) {
// REMOVED global $post - not helpful here
$post_type = get_post_type( $post->ID );
// ... the rest of your code here
}
// Your original hook, it's passing the $post_object parameter
add_action('the_post', 'wpforce_featured');
// The save hook, which passes parameters - modified to call a different function
add_action('save_post', 'wpforce_featured_save', 10, 3);
// The status change hooks, which pass parameters - modified to call a different function
add_action('draft_to_publish', 'wpforce_featured_on_status_change', 10, 3);
add_action('new_to_publish', 'wpforce_featured_on_status_change', 10, 3);
add_action('pending_to_publish', 'wpforce_featured_on_status_change', 10, 3);
add_action('future_to_publish', 'wpforce_featured_on_status_change', 10, 3);