您好我想创建两个具有不同参数但具有相同公共功能的函数。这是我的榜样......
常用功能:
function my_responsive_pictures($post_id){
// Get alt text or set the $alt_text variable to the post title if no alt text exists
$alt_text = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
if ( !$alt_text ) { $alt_text = esc_html( get_the_title($post_id) ); }
// Get the info for each image size including the original (full)
$thumb_original = wp_get_attachment_image_src($attachment_id, 'slideshow');
$thumb_large = wp_get_attachment_image_src($attachment_id, 'slideshow-lg');
$thumb_medium = wp_get_attachment_image_src($attachment_id, 'slideshow-md');
$thumb_small = wp_get_attachment_image_src($attachment_id, 'slideshow-xs');
// Create array containing each image size + the alt tag
$thumb_data = array(
'thumb_original' => $thumb_original[0],
'thumb_large' => $thumb_large[0],
'thumb_medium' => $thumb_medium[0],
'thumb_small' => $thumb_small[0],
'thumb_alt' => $alt_text
);
// Echo out <picture> element based on code from above
echo '<picture>';
echo '<!--[if IE 9]><video style="display: none;"><![endif]-->'; // Fallback to <video> element for IE9
echo '<source srcset="' . $thumb_data['thumb_large'] . ', ' . $thumb_data['thumb_original'] . ' x2" media="(min-width: 800px)">';
echo '<source srcset="' . $thumb_data['thumb_medium'] . ', ' . $thumb_data['thumb_large'] . ' x2" media="(min-width: 400px)">';
echo '<source srcset="' . $thumb_data['thumb_small'] . ', ' . $thumb_data['thumb_medium'] . ' x2">';
echo '<!--[if IE 9]></video><![endif]-->'; // Fallback to <video> element for IE9
echo '<img srcset="' . $thumb_data['thumb_small'] . ', ' . $thumb_data['thumb_medium'] . ' x2" alt="' . $thumb_data['thumb_alt'] . '">';
echo '</picture>';
}
另一个调用公共函数的人:
function my_responsive_thumbnail($post_id){
// Get the featured image ID
$attachment_id = get_post_thumbnail_id($post_id);
my_responsive_pictures();
}
第二个带有其他参数$ attachment_ID:
function my_responsive_acfthumbnail($post_id){
// Get the featured image ID
$attachment_id = get_field('image_bandeau');
my_responsive_pictures();
}
什么都没发生:(。我做错了什么?感谢你的帮助......
答案 0 :(得分:0)
您的功能需要一个参数,当您在此处调用
时my_responsive_pictures();
你没有通过任何东西。
您还必须先调用my_responsive_thumbnail()函数,然后再调用您的&#34; common&#34;功能
答案 1 :(得分:0)
此代码存在一些问题。我们需要关注的第一件事是主要功能。
function my_responsive_pictures($post_id){
您的功能定义没有给$post_id
一个默认值,因此只要您调用该功能就需要它。通过尝试在不传递参数的情况下调用函数,您将触发错误。
$alt_text = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
if ( !$alt_text ) { $alt_text = esc_html( get_the_title($post_id) ); }
此处您指的是尚未设置的$attachment_id
。如果找不到,那么你就会获得帖子的标题。
为此,您需要为该功能设置两个参数。
function my_responsive_pictures( $attachment_id, $post_id ) {
每当我们调用此函数时,我们都需要传递$attachment_id
(图片的ID)和$post_id
(帖子的ID)。
接下来我们需要修改最终调用main函数的函数。
function my_responsive_thumbnail( $post_id ) {
// Get the featured image ID
$attachment_id = get_post_thumbnail_id( $post_id );
// Now that we have the featured image ID, we really ought
// to do some error checking. Let's assume that all went well.
my_responsive_pictures( $attachment_id, $post_id );
}
下一个功能需要更多关注。请记住,您使用帖子ID调用这些函数。您需要让get_field()
知道应该检索图片的帖子的ID。
function my_responsive_acfthumbnail( $post_id ) {
// Get the featured image ID
$attachment_id = get_field( 'image_bandeau', $post_id );
my_responsive_pictures( $attachment_id, $post_id );
}
使用示例:
my_responsive_acfthumbnail( get_the_ID() );
您可能还需要考虑为帖子ID设置默认值,以便在检索您正在查看的当前帖子的图片时不需要将其传入。
最后,考虑调用my_responsive_pictures
的函数之间的重复级别。您将要检查附件ID是否有效,因此功能可能会变得更大,只有1行不同。
有关get_field()
的更多信息:https://www.advancedcustomfields.com/resources/get_field/